簡體   English   中英

MySQL 內連接查詢 select 從同一個表多次

[英]MySQL inner join query select from same table multiple times

我相信我已經正確地形成了這個問題標題,因為我不確定如何形成它。 例如,我在下面總結了我的查詢。

我有一個訂單表,其中保存了訂單詳細信息,例如客戶 ID、地址和產品 ID,以及為每個訂單連續訂購的數量。 因此,多個庫存/產品 ID 保存在一行中。

所以我的查詢看起來像:這是一個匯總查詢,以便於解釋我省略了其他各種字段。

SELECT customer.name,customer.address,tbl_order.order_date,tbl_order.product1_id,tbl_order.product2_id,inventory.product1_name,inventory.product2_name 
FROM tbl_order 
INNER JOIN customer ON tbl_order.customer_id = customer.id 
INNER JOIN inventory on tbl_order.product1_id = inventory.id 
INNER JOIN inventory on tbl_order.product2_id = inventory.id 
where  YEAR(tbl_order.order_date)='$year'

所以我的問題是如何根據 tbl_order 中的每個產品 id 從庫存表中獲取庫存詳細信息。 我正在運行一個while循環來顯示一年的所有數據

while($row=mysqli_fetch_assoc($sql1))

我可以將此查詢分為 2 並單獨運行庫存查詢,然后如何組合 while 循環,因為有時當某些產品不在訂單表中時也可能存在空查詢(取決於訂購的訂單,並非所有產品都已訂購) 所以這不起作用

while($row=mysqli_fetch_assoc($sql1)) and ($row1=mysqli_fetch_assoc($inv1)) and ($row2=mysqli_fetch_assoc($inv2)) 

等 10 種產品

首先,您的數據庫設計很糟糕,我建議您規范化您的數據庫。

其次,如果您不能重新設計數據庫,您可以使用多個帶有別名的連接,例如:

SELECT
    customer.name, customer.address, tbl_order.order_date, 
    tbl_order.product1_id, inv1.product1_name,
    tbl_order.product2_id, inv2.product2_name 
FROM tbl_order 
INNER JOIN customer ON tbl_order.customer_id = customer.id 
INNER JOIN inventory AS inv1 ON tbl_order.product1_id = inv1.id 
INNER JOIN inventory AS inv2 ON tbl_order.product2_id = inv2.id 
WHERE  YEAR(tbl_order.order_date)='$year'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM