2012-07-05 137 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

不客气 –