2011-05-19 112 views
1

我在數據庫中有2個表。我用下面的查詢:sql 2表查詢問題

Select U.id, U.ad, COUNT(B.id) AS 'total' 
FROM tblProducts U 
    INNER JOIN TblBasvurular B ON B.urunid=U.id 
GROUP BY u.id,u.ad 

這讓我

id | productname | total 
------------------------------- 
1 | bread   | 2 
2 | water   | 3 
3 | milk   | 1 

,但我看不到其他產品。如果不存在,它不會告訴我其他人。

我怎樣才能得到這樣的:

id | productname | total 
------------------------------- 
1 | egg   | 0 
2 | bread  | 2 
3 | water  | 3 
4 | tea   | 0 
5 | milk  | 1 

回答

1

這是不夠明確,因爲你沒不會給我們看第二張桌子。 但試圖改變內部連接到左加入您的查詢:

select 
U.id, 
U.ad, 
COUNT(B.id) as 'total' 
from tblProducts U 
left join TblBasvurular B on B.urunid=U.id 
Group by u.id,u.ad 
3

你沒有指定RDBMS,但假設它是SQL服務器:

select U.id, U.ad, COUNT(ISNULL(B.id, 0)) as 'total' 
from tblProducts U 
left join TblBasvurular B on B.urunid = U.id 
Group by u.id, u.ad 
+0

你怎麼知道它是Microsft數據庫? ISNULL()是否適用於Oracle或MySQL? – chance 2011-05-19 07:58:01

+0

並非所有的數據庫SQL服務器? ;)這是我的一個假設。 – 2011-05-19 07:58:46

0

使用LEFT JOIN:

select U.id,U.ad,COUNT(B.id)as 'total' 
from tblProducts U LEFT join TblBasvurular B on B.urunid=U.id 
Group by u.id,u.ad 

如果是Oracle,那麼試試這個:

select U.id,U.ad,NVL(COUNT(B.id),0) as 'total' 
from tblProducts U LEFT join TblBasvurular B on B.urunid=U.id 
Group by u.id,u.ad 

這將顯示0而不是NULL。

如果是SQL Server,則使用ISNULL而不是NVL;如果是MySQL,請使用IFNULL。

對於所有這些RDBMS,函數​​3210都有效。

+0

我用mssql服務器謝謝 – bulent 2011-05-19 08:06:17