1

我有 3 个实体或表BOOKSCIENCEFICTION. SCIENCE并通过名为 的外键FICTION连接。还包含另一个名为.BOOKISBNBOOKAUTHOR

我想选择所有作者的书要么是科幻要么是小说。如果两本书的作者相同,我应该保留这两个记录。

我想出了以下解决方案(显然不正确):

SELECT BOOK.AUTHOR AS AUTHOR FROM BOOK, FICTION, SCIENCE
WHERE BOOK.ISBN = FICTION.ISBN OR BOOK.ISBN = SCIENCE.ISBN;

但正确的应该是:

SELECT BOOK.AUTHOR AS AUTHOR FROM BOOK, FICTION
WHERE BOOK.ISBN = FICTION.ISBN
UNION ALL
SELECT BOOK.AUTHOR AS AUTHOR FROM BOOK, SCIENCE
WHERE BOOK.ISBN = SCIENCE.ISBN;

事实上,它们会产生不同的结果。我的查询返回更多记录。我的查询有什么问题?我的查询和它下面的“正确”查询有什么区别?

4

2 回答 2

0

有查询没有错 OR 查询产生所有实例如果有相似的行联合选择只产生一个实例..

OR 查询返回关系结果..联合返回集合理论结果

于 2016-03-22T21:44:42.957 回答
0

在第一个查询中,如果 Book 的 ISBN 与 Fiction ISBN 匹配,则连接所有Science 记录,反之亦然,如果 Science ISBN 匹配,则连接所有Fiction 记录。

于 2016-03-22T21:48:02.543 回答