左连接给出了错误的结果

时间:2014-04-18 17:59:59

标签: sql

我有3个表Products,Order,Order_Placed

Products---------- Order---------------- Order_Placed
________________________________________________________
prod_id | -------| order_id | -------| prod_id  |order_id| 

1000----------------2001-------------------1000|2001


1001----------------2002-------------------1000|2002

1002--------------- 2003------------------1001|2001

所以我的查询是这样的:

select P.Prod_ID, COUNT(*) 
from PRODUCTS P
LEFT JOIN ORDER_PLACED OP
ON P.PROD_ID= OP.PROD_ID
group by ....

所以结果应该是:

Prod_Id  Count(*)

1001      2

1002      1

1003      0

1 个答案:

答案 0 :(得分:2)

不。 count(*)永远不会返回0。它不返回任何内容(根本没有行)或至少返回1.

你想:

select P.Prod_ID, COUNT(OP.PROD_ID) 
from PRODUCTS
LEFT JOIN ORDER_PLACED OP
ON P.PROD_ID= OP.PROD_ID
group by ....

注:

尝试在我的回复中添加限定符。但count(*)0的任何情况下都无法返回group by。零意味着组中没有行。而这反过来意味着输出中没有行。如果没有为全局聚合选择任何行,则它可以返回0