2015-07-04 96 views
2

我有3個表(產品,bill_Details和賬單),我想檢索bill_details表中每個產品的數量,下面的查詢只是給我在bill_details表「剛」的產品,如果bill_details爲空,沒有任何檢索!左加入mysql數據庫

enter image description here

,這是我的查詢:

select p.prod_Id,p.prod_Name, 
sum(b.de_Quantity+b.de_Bonus) - sum(bbb.de_Quantity+bbb.de_Bonus), 
p.prod_Cost,p.prod_ExpDate,p.prod_BonusInfo,p.prod_Note 

from 

(((products p left JOIN bill_Details b on p.prod_Id=b.prod_Id) 
left JOIN bill_Details bbb on p.prod_Id=bbb.prod_Id) 
left JOIN bills a on b.bill_Id = a.bill_Id) 
left JOIN bills aaa on bbb.bill_Id = aaa.bill_Id 

where 

a.cus_Sup=1 and aaa.cus_Sup=0 and a.archived=0 and aaa.archived=0 
group by p.prod_Id,p.prod_Name,p.prod_Cost,p.prod_ExpDate, 
p.prod_BonusInfo,p.prod_Note order by p.prod_Name asc; 

回答

0

WHERE子句檢查,對那些留下連接表。通過這樣做,您可以有效地移除左連接中不匹配的行。可能不是你想要的。

相反,你想要的東西可能是移動這些條件中加入條款本身,就像這樣:

select p.prod_Id,p.prod_Name, 
sum(b.de_Quantity+b.de_Bonus) - sum(bbb.de_Quantity+bbb.de_Bonus), 
p.prod_Cost,p.prod_ExpDate,p.prod_BonusInfo,p.prod_Note 

from 

(((products p left JOIN bill_Details b on p.prod_Id=b.prod_Id) 
left JOIN bill_Details bbb on p.prod_Id=bbb.prod_Id) 
left JOIN bills a on b.bill_Id = a.bill_Id and a.cus_Sup=1 and a.archived=0) 
left JOIN bills aaa on bbb.bill_Id = aaa.bill_Id and aaa.cus_Sup=0 and aaa.archived=0 

group by p.prod_Id,p.prod_Name,p.prod_Cost,p.prod_ExpDate, 
p.prod_BonusInfo,p.prod_Note order by p.prod_Name asc; 
+0

感謝名單@sstan,但這種情況也與其他類型的加盟? –

+0

正常連接時,放置條件afaik的位置沒有區別。雖然我個人試圖養成將他們置入連接條件的習慣,這樣當我突然混入左連接時,我不會遇到不好的驚喜。 – sstan

+0

有沒有關於這個規則的任何資源或文章來清楚地理解它?! –