0

我的大脑在这个问题上变得糊涂,但我怀疑有一个简单的答案。

我有一张戏剧表演表,还有一张这些表演的评论表。评论有一个标志来表示该评论是内部评论还是观众评论,即 1 表示内部评论,0 表示观众。

现在,我想做的是退回所有没有内部审查的节目。我尝试了以下,但没有结果(显然是因为我冲突 r.id is NULL and 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,那么我会得到结果,但如果有观众评论,则会出现误报。

4

1 回答 1

2

r.author = 1在加入之前先将ON子句转移到过滤表。reviewsshows

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和之间的区别在于WHEREON在加入另一个表之前过滤来自特定表的行,而在加入表WHERE之后过滤结果。

于 2013-04-12T16:26:16.320 回答