我有 3 个实体或表BOOK
:SCIENCE
和FICTION
. SCIENCE
并通过名为 的外键FICTION
连接。还包含另一个名为.BOOK
ISBN
BOOK
AUTHOR
我想选择所有作者的书要么是科幻要么是小说。如果两本书的作者相同,我应该保留这两个记录。
我想出了以下解决方案(显然不正确):
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;
事实上,它们会产生不同的结果。我的查询返回更多记录。我的查询有什么问题?我的查询和它下面的“正确”查询有什么区别?