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

Posted

技术标签:

【中文标题】我正在尝试学习 sqlite 查询,但不断收到此错误【英文标题】:I'm trying to learn sqlite queries but keep getting this error 【发布时间】:2020-12-06 21:01:39 【问题描述】:

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

查找在某个班级所在的每个房间任教的教职员工的姓名 教过。

以下是关系:

这就是我所拥有的:

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 ))    

这是我得到的错误:

我已经仔细检查过,括号是平衡的。所以我有点困惑从这里去哪里。


【问题讨论】:

【参考方案1】:

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

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)

【讨论】:

【参考方案2】:

您必须删除包围每个子查询的括号并在每个子查询中选择相同的列(我猜只需要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 也不是真正需要的,因为您正在从Faculty 中选择唯一的(我相信)fnames。

【讨论】:

【参考方案3】:

问题是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
                 )

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

【讨论】:

您好,感谢您的快速回复。所以我刚刚输入了你的答案,但我仍然遇到同样的错误。 @PeterShepherd 。 . . SQLite 不喜欢多余的括号。

以上是关于我正在尝试学习 sqlite 查询,但不断收到此错误的主要内容,如果未能解决你的问题,请参考以下文章

我正在尝试在用户键入时查询 firebase 数据库,但我不断收到此错误

我正在尝试使用硒,但不断收到此错误 [重复]

我正在尝试在我的程序中本地解码 JSON 文件,但不断收到错误

如何处理 django 查询集中的变量字符串?

我正在尝试归档一个由流星构建的 ios 应用程序,但 Xcode 但我不断收到“模糊使用 [...]”

使用 R 连接到 BigQuery 时不断收到拒绝访问