我有 3 个实体或表:BOOK
、SCIENCE
和 FICTION
。 SCIENCE
和 FICTION
通过名为 ISBN
的外键连接到 BOOK
。 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;
的确,它们会产生不同的结果。我的查询返回更多记录。我的查询有什么问题?我的查询和下面的“正确”查询有什么区别?
最佳答案
查询没有错OR查询产生所有实例如果有相似的行联合选择只产生一个实例..
OR 查询返回关系结果.. union 返回集合理论结果
关于mysql - 在这种情况下 OR 和 UNION ALL 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36165779/