【发布时间】:2020-10-08 03:42:05
【问题描述】:
鉴于此关系模式
- 人员(pid、姓名、性别、年龄、电子邮件、城市、州)
- 图书(ISBN、书名、版本、出版商、年份、评级)
- write (pid, ISBN) pid 是外键,指的是人 (pid),ISBN 是外键,指的是书籍 (ISBN)
我需要编写一个 SQL 查询来查找从未出版过合着书籍或仅与同一州的其他人合着的作者,返回他们的姓名。
我知道我需要使用自联接,但不知道该怎么做。
谢谢!
【问题讨论】:
标签: sql
鉴于此关系模式
我需要编写一个 SQL 查询来查找从未出版过合着书籍或仅与同一州的其他人合着的作者,返回他们的姓名。
我知道我需要使用自联接,但不知道该怎么做。
谢谢!
【问题讨论】:
标签: sql
我认为蒂姆的推理是正确的,但查询不是。它需要在writes 上自加入:
select p.*
from people p
where not exists (select 1
from writes w join
writes w2
on w.isbn = w2.isbn join
people p2
on w2.pid = w.pid
where w.pid = p.pid and
p.state <> p2.state
);
【讨论】:
您的两个逻辑标准实际上可以浓缩为您只希望与来自不同州的其他人没有合着书籍的作者。因此,我们可以为此编写一个查询:
SELECT p1.name
FROM people p1
WHERE NOT EXISTS (SELECT 1 FROM write w INNER JOIN people p2 ON p2.pid = w.pid
WHERE w.pid = p1.pid AND p2.state <> p1.state);
【讨论】:
ISBN 存在并且与某个作者相关联。
return their names ...你没有提到任何其他领域。如果您需要其他字段,那么您应该提及这一点。