加入两个mysql表where子句可能不存在

时间:2014-07-04 17:17:50

标签: mysql join left-join

好的,这个标题几乎没有描述这个问题。但我坚持如何解决这个问题,所以我只是试着去描述它。

我有两个mySql表:listing,userVotes

列表包含字段(id,description,votes) userVotes有字段(userId,listingsId)

我想尝试获取这些表的连接,结果是(id,description,votes,userId,listingsId,vote)

所以声明通常是"选择*加入id = listing id" (转述)

但是这导致了问题,因为即使没有用户投票,我仍然需要显示列表。

所以我将其更改为"选择* left join"并且即使没有与之关联的userVote,也允许我检索列表。

但这导致了另一个问题。我需要有约束"其中userId =' foo'&#34 ;;在结果上。但这不起作用,因为它再次省去了没有userId的列表。

基本上我需要声明: "从列表中选择*左边加入userVote u on l.id = u.listingId where if userdd =' foo'"

可行吗?

1 个答案:

答案 0 :(得分:2)

您可以将条件移动到左连接的ON子句,以使其不限制生成的行;

SELECT * 
FROM listings l 
LEFT JOIN userVote u 
  ON l.id = u.listingId 
 AND u.userId = 'foo'

您在WHERE子句中放置的任何限制都将删除结果,而任何放入左连接的ON子句中的任何限制只会将userVote设置为NULL(如果不匹配)。