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

标签 mysql sql union-all or-operator

我有 3 个实体或表:BOOKSCIENCEFICTIONSCIENCEFICTION 通过名为 ISBN 的外键连接到 BOOKBOOK 还包含另一个名为 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/

相关文章:

mysql - mysql中两个大表之间的连接查询

php - 多个字段的 Laravel SUM 使用原始查询返回 null

sql - select语句where子句两个条件

PHP MYSQL 数组和排序

MYSQL - 从两个表的 INNER JOIN 获取数据

sql - 如何从将多行返回到单个结果的查询中获得 "merge"、 "flatten"或 "pivot"结果?

sql - 从 24 小时前存在的表中查找用户

mysql - MySQL 5.6 优化 SQL 查询

sql - 使用 UNION ALL 分组和排序

excel - 带有循环和联合的 MS VBA