我的大脑正在思考这个问题,但我怀疑有一个简单的答案。
我有一张戏剧表演表,还有一张对这些表演的评论表。评论有一个标志来表示评论是内部评论还是受众评论,即 1 表示内部评论,0 表示受众评论。
现在,我想做的是返回所有没有内部评论的节目。我尝试了以下操作,但没有结果(显然是因为我冲突 r.id is NULL 和 r.author = 1)
SELECT s.title FROM shows s LEFT OUTER JOIN reviews r ON s.id = r.showid WHERE r.id is NULL AND r.author = 1
如果我取消 r.author = 1,那么我会得到结果,但如果有观众评论,则会出现误报。
最佳答案
在加入 shows
之前,首先在 ON
子句中传输 r.author = 1
以过滤表 reviews
.
SELECT s.title
FROM shows s
LEFT OUTER JOIN reviews r
ON s.id = r.showid AND
r.author = 1
WHERE r.showid is NULL
ON
和 WHERE
之间的区别在于,ON
在加入另一个表之前过滤特定表中的行,而 WHERE
在连接表后过滤结果。
关于MySQL:当特定类型的记录不在另一个表中时如何连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15976380/