Mysql

如何在我能夠檢索所有數據的兩個表上執行內部聯接?

  • February 16, 2022

我需要有關 MySQL 查詢的幫助。

  • bar_opening_details有收盤和開盤庫存
  • bar_recvd_details已收到股票

當我收到購買的股票時,我將其插入bar_recvd_details. 接下來,我將更新商品close_valbar_opening_details期末庫存值。

當我將這兩個表連接在一起時,從返回的行bar_opening_details數等於從返回的行數bar_recvd_details。IE 中不匹配的行bar_opening_details不再返回。

小提琴在這裡可用

下面是我想要的輸出。

  • 我想加入表格item_id
  • 我想要每個表中的所有數據,其中<date column> = '2019-06-18'來自各個表
  • 我也想要來自 的數據bar_recvd_details,即使recvd_value IS NULL

bar_opening_details

SELECT *  FROM bar_opening_details 

bar_recvd_details

SELECT *  FROM bar_recvd_details 

兩個表連接

      SELECT 
           bar_opening_details.item_cid,
           bar_opening_details.item_id,
           bar_opening_details.op_value,
           bar_opening_details.close_val,
           bar_opening_details.close_date,
           bar_recvd_details.recvd_value,
           bar_recvd_details.recvd_date,
           bar_recvd_details.item_id
       FROM
           bar_opening_details
               LEFT JOIN bar_recvd_details 
               ON bar_recvd_details.item_id = bar_opening_details.item_id 
       where bar_opening_details.close_date = '2019-06-18' 

下面是我想要的輸出

我想加入 item_id 上的表格

你成功地做到了這一點。您只是使用了錯誤的聯接類型。

我還想要來自 bar_recvd_details 的數據,即使 recvd_value 為 NULL

你不能用 INNER JOIN 做到這一點。相反,您需要使用 LEFT JOIN 才能從 JOIN 右側的表中返回 NULL,其中不存在數據。例如,LEFT JOIN bar_recvd_details b而不是INNER JOIN bar_recvd_details b

我想要每個表中的所有數據,其中 = ‘2019-06-18’ 來自各個表

你已經成功地做到了。但是,當移動到 LEFT JOIN 時,要滿足上述條件,您需要將該 WHERE 條件移動到 JOIN 條件。IEON a.item_id=b.item_id AND b.recvd_date = '2019-06-18'

SELECT a.item_cid,
   a.item_id,
   a.op_value,
   a.close_val,
   a.op_date,
   a.close_date,
   b.recvd_value
FROM bar_opening_details AS a
   LEFT JOIN bar_recvd_details AS b
   ON a.item_id = b.item_id AND b.recvd_date = '2019-06-18'
WHERE a.close_date = '2019-06-18';

小提琴

引用自:https://dba.stackexchange.com/questions/307556