select title
from Movie M , Rating R
where exists((select M.mID
from Movie)
except (select R.mID
from Rating));
错误:接近“(”:语法错误
答案 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);