2012-07-05 51 views
2

我在數據庫中有兩個表:難點使用LEFT JOIN在MySQL

Article 
-------------------------------------------- 
articleID INTEGER PRIMARY KEY AUTOINCREMENT 
userID VARCHAR 

Rating 
-------------------------------------------- 
articleID INTEGER 
userID VARCHAR 
rating INTEGER 

的樣本數據:

Article 
articleID  userID 
--------------------------------- 
1    12345 
2    23456 
3    23456 
4    99999 
5    15678 

Rating 
articleID  userID  rating 
-------------------------------------------- 
1    12345   7.5 
2    12345   8.5 
2    31359   7.5 
1    24021   0.0 
1    25012   7.5 

我想所有的文章,並顯示如果我有額定與否。我試過,我只能用額定文章與這一說法得到名單:

SELECT a.*, rating AS myRating FROM Article AS a 
LEFT JOIN Rating AS b 
ON a.articleID = b.articleID 
WHERE (b.userID is NULL || b.userID = "12345") 

我如何加入表得到的結果?

Expected output (with userID 12345) 
articleID  userID  myRating 
-------------------------------------------- 
1    12345   7.5 
2    23456   8.5 
3    23456   NULL 
4    99999   NULL 
5    15678   NULL 

回答

4

的WHERE子句將篩選出其中用戶ID是不是12345或NULL列...

SELECT a.*, rating AS myRating 
FROM Article AS a 
LEFT JOIN Rating AS b 
ON a.articleID = b.articleID 
AND b.userID = "12345" 

既然你想顯示所有行的,把用戶ID限制在ON條款中。現在,它會得到A的所有線路,NULL的評價,如果用戶ID是不是12345

+0

這就是我想要的東西,現在我知道什麼是我的問題,謝謝! – Hanon

1

你的意思是,

SELECT a.*, b.rating AS myRating 
FROM Article AS a 
LEFT JOIN Rating AS b ON(a.articleID = b.articleID AND b.userID = "12345") 
+0

是的,謝謝你的幫忙! – Hanon

+0

不客氣 –