Sql 为什么我的查询返回空结果?
以下是数据集:Sql 为什么我的查询返回空结果?,sql,Sql,以下是数据集: 电影(年中,头衔,年份,导演) 中文:有一部电影的ID号是mID、片名、发行年份和导演 Reviewer(rID,name) 中文:ID号为rID的审核人有特定姓名 评级(rID、mID、stars、评级日期) 中文:评论员在某个日期给电影评了一个星级(1-5) 问题是:找到所有没有收视率的电影的标题 我的回答:(返回一个空集) 正确答案: select title from movie left join rating using (mID) where star
(电影
)年中,头衔,年份,导演
中文:有一部电影的ID号是mID、片名、发行年份和导演
(Reviewer
)rID,name
中文:ID号为
的审核人有特定姓名rID
(评级
)rID、mID、stars、评级日期
中文:评论员在某个日期给电影评了一个星级(1-5)
select title
from movie
left join rating using (mID)
where stars is null
我不确定我的加入有什么问题?提前谢谢 您的查询会找到每个
电影
记录,这些记录都有相应的评级
记录-这就是电影加入评级
的含义-前提是所述评级
记录有星号为空
正确的查询将查找缺少评级
记录或具有评级
记录且带有星星的电影
记录为空
关键的区别在于,作为第一步,您的查询将过滤掉任何电影
记录,而不匹配评级
记录(因为这些记录将使连接失败),而正确的查询使用左连接
来阻止此过滤
(请注意,即使使用
左连接
,如果WHERE
子句构造得不好,也会发生这种过滤。例如,WHERE stars='X'
也会过滤掉没有相应评级
记录的电影
记录,因为只有现有的评级
记录才能满足要求。)WHERE
-子句。但是对于WHERE stars IS NULL
,不会出现此问题,因为当连接失败时,NULL
是stars
的默认值。)您可以使用标题没有星星的查询,“在rating.mid=movie.mid,其中rating.rid为空时,从电影左连接分级中选择标题”
或者你可以使用
select title from movie where mid not in (select distinct mid from rating )
select title from movie where mid not in (select distinct mid from rating )