自联接查询

时间:2020-10-08 03:42:05

标签: sql

给出以下关系模式

map.get(stringValue)==null

write(people ____________________________________________________ | pid | name | gender | age | email | city | state | ---------------------------------------------------- books _____________________________________________________ | ISBN | title | edition | publisher | year | rating | ----------------------------------------------------- pid)pid是一个外键,它引用ISBNpeople(pid)是一个外键,它引用ISBN

我需要编写一个SQL查询来查找从未发表过共同著作或仅与同一州的其他人共同著作的作者,并返回他们的名字。

我知道我需要使用自我联接,但不确定如何做到这一点。

谢谢!

2 个答案:

答案 0 :(得分:1)

我认为Tim的推理是正确的,但查询不正确。它需要在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
                 );

答案 1 :(得分:0)

您的两个逻辑标准实际上可以简化为一个说法,即您只希望与其他国家/地区的作者共同拥有合著书的作者。因此,我们可以为此编写查询:

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);
相关问题