好的,这个标题几乎没有描述这个问题。但我坚持如何解决这个问题,所以我只是试着去描述它。
我有两个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'"
可行吗?
答案 0 :(得分:2)
您可以将条件移动到左连接的ON子句,以使其不限制生成的行;
SELECT *
FROM listings l
LEFT JOIN userVote u
ON l.id = u.listingId
AND u.userId = 'foo'
您在WHERE子句中放置的任何限制都将删除结果,而任何放入左连接的ON子句中的任何限制只会将userVote设置为NULL(如果不匹配)。