给出以下关系模式
map.get(stringValue)==null
write(people
____________________________________________________
| pid | name | gender | age | email | city | state |
----------------------------------------------------
books
_____________________________________________________
| ISBN | title | edition | publisher | year | rating |
-----------------------------------------------------
,pid
)pid是一个外键,它引用ISBN
,people(pid)
是一个外键,它引用ISBN
我需要编写一个SQL查询来查找从未发表过共同著作或仅与同一州的其他人共同著作的作者,并返回他们的名字。
我知道我需要使用自我联接,但不确定如何做到这一点。
谢谢!
答案 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);