问题是'查找已发布所有字段书籍的发布者'。嵌套查询和双重否定
book(ISBN(PK), Publisher(FK))
field(Book(FK), field)
Publisher(name(PK))
我还没有找到确切的办法,一直在尝试不同的方式,但没有任何帮助。我问了这个问题,但答案是......不是最好的。答案我得到是 - 逻辑是要“找出版商那里心不是一个领域,出版商处理不当出版了一本书about'-
问题是'查找已发布所有字段书籍的发布者'。嵌套查询和双重否定
book(ISBN(PK), Publisher(FK))
field(Book(FK), field)
Publisher(name(PK))
我还没有找到确切的办法,一直在尝试不同的方式,但没有任何帮助。我问了这个问题,但答案是......不是最好的。答案我得到是 - 逻辑是要“找出版商那里心不是一个领域,出版商处理不当出版了一本书about'-
with cnt as (select count(distinct field) c from field)
select b.Publisher
from book b
inner join field f on (b.ISBN=f.Book)
inner join cnt on (1=1)
group by b.Publisher, cnt.c
having count(distinct field) = cnt.c;
我相信这会工作。
这个模式是不可靠的......为什么'Field'表与'Book'有'FOREIGN KEY'关系?这没有任何意义。用你提供的结构,你将如何确定*所有领域*实际上意味着什么?你提到的逻辑是正确的,你需要检查一个作者没有出版过书籍的字段是否存在。*(提示:你可能需要一个WHERE NOT EXISTS或者一个OUTER JOIN'。)* – Siyual