我正在尝试学习 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
中选择唯一的(我相信)fname
s。
【讨论】:
【参考方案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 文件,但不断收到错误