如何更正此sql代码中的错误?

时间:2018-03-17 08:04:28

标签: sql sqlite

select title
from Movie M , Rating R
where exists((select M.mID
               from Movie)
               except (select R.mID
                       from Rating));
  

错误:接近“(”:语法错误

2 个答案:

答案 0 :(得分:1)

使用JOIN

执行正确的LEFT OUTER JOIN
SELECT m.* FROM Movie m
LEFT OUTER JOIN Rating r
                  ON r.mID = m.mID 
WHERE r.mID IS NULL

答案 1 :(得分:0)

括号用于子查询,但compound query不是由子查询组成的,因此必须同时写两个SELECT:

SELECT title
FROM Movie M , Rating R
WHERE EXISTS (SELECT M.mID
              FROM Movie
              EXCEPT
              SELECT R.mID
              FROM Rating);

但是虽然这个查询在语法上是有效的,但它仍然没有意义。 EXISTS只检查权限方的子查询是否返回任何行;这通常需要correlated subquery来使子查询依赖于外部查询中的当前行。在外部查询中使用Rating表是没有意义的。

您应该使用IN而不是EXISTS:

SELECT title
FROM Movie
WHERE mID IN (SELECT mID
              FROM Movie
              EXCEPT
              SELECT mID
              FROM Rating);

您已经知道Movie表中的所有ID都存在于Movie表中,因此您不必在子查询中重复它;简单地反转比较:

SELECT title
FROM Movie
WHERE mID NOT IN (SELECT mID
                  FROM Rating);