我正在尝试学习 sqlite 查询但不断收到此错误

I'm trying to learn sqlite queries but keep getting this error

我正在尝试使用 sqliteonline.com 编写一个 SQLite 查询,它可以:

找出在每个 class 所在的每个房间任教的教职员工的姓名 受教了。

关系如下:

这是我的:

SELECT DISTINCT F.fname
FROM Faculty F
WHERE NOT EXISTS (( SELECT *
                    FROM Class C )
                    EXCEPT
                   (SELECT C1.room
                    FROM Class C1
                    WHERE C1.fid = F.fid ))    

AND 这是我得到的错误:

我仔细检查了一下,括号是平衡的。所以我对从这里去哪里感到困惑。


问题是select *。只是 select 两边的同一列 except:

SELECT F.fname
FROM Faculty F
WHERE NOT EXISTS (SELECT c.Room
                  FROM Class C
                  EXCEPT
                  SELECT C1.room
                  FROM Class C1
                  WHERE C1.fid = F.fid
                 )

注意:您可能 select 不仅仅是名字。 Faculty 中的行应该是唯一的。

您必须删除包含每个子查询的括号和 select 每个子查询中的相同列(我猜只需要 room):

SELECT F.fname
FROM Faculty F
WHERE NOT EXISTS ( SELECT room FROM Class C 
                   EXCEPT
                   SELECT C1.room
                   FROM Class C1
                   WHERE C1.fid = F.fid 
                 )

另外 DISTINCT 并不是真正需要的,因为你 selecting 独一无二(我相信)来自 Faculty.

fname

这看起来像是一个关系除法问题。我会用一种规范的方法来解决这个问题,使用连接和聚合:

select fname
from faculty f
inner join class c on c.fid = f.fid
group by fname
having count(distinct c.room) = (select count(distinct room) from class)