在这种情况下,OR和UNION ALL之间的区别

时间:2016-03-22 21:40:57

标签: mysql sql union-all or-operator

我有3个实体或表:BOOKSCIENCEFICTIONSCIENCEFICTION通过名为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;

确实他们会产生不同的结果。我的查询返回了更多的记录。我的查询有什么问题?我的查询和"正确"之间的区别是什么?查询下面呢?

2 个答案:

答案 0 :(得分:0)

如果有类似的行,那么OR查询产生所有实例的查询没有错误,union union只生成一个实例。

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

答案 1 :(得分:0)

在第一个查询中,如果图书的ISBN与小说ISBN匹配,则所有科学记录将被加入,反之亦然,如果科学ISBN匹配,则所有小说记录已加入。