我试图找出在SQL中使用all
的等价物,在sqlite中(它不支持'all'运算符)。例如,我想查询教授与John Smith相同课程的教师。
我试图理解为什么我的流程不正确。
select distinct instructor
from testTable
where not exists(
select course from testTable where not exists (
select course from testTable where instructor = 'John Smith')
)
我背后的想法是找到所有不是约翰史密斯教授的课程,然后外部不存在将返回所有教授与约翰史密斯相同课程的教师。
示例输入和输出:
CREATE TABLE testTable (instructor TEXT, course TEXT);
INSERT INTO testTable values ('John Doe', 'Math');
INSERT INTO testTable values ('John Doe', 'English');
INSERT INTO testTable values ('John Doe', 'Physics');
INSERT INTO testTable values ('Jane Doe', 'Math');
INSERT INTO testTable values ('John Smith', 'Physics');
INSERT INTO testTable values ('John Smith', 'Math');
INSERT INTO testTable values ('Janice Smith', 'English');
INSERT INTO testTable values ('Janice Smith', 'Physics');
INSERT INTO testTable values ('James Smith', 'Math');
INSERT INTO testTable values ('James Smith', 'Physics');
输出应为:
James Smith
John Smith
John Doe
答案 0 :(得分:1)
一种方法是使用自我加入,然后由教师进行聚合,以检查匹配课程的数量是否与John Smith的名单一致。
SELECT t1.instructor
FROM testTable t1
INNER JOIN testTable t2
ON t1.course = t2.course AND
t2.instructor = 'John Smith'
GROUP BY
t1.instructor
HAVING
COUNT(*) = (SELECT COUNT(*) FROM testTable WHERE instructor = 'John Smith');
这个答案假定给定的教师/课程对只出现一次而不是一式两份。如果没有,则需要稍微修改上述查询。