我有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;
确实他们会产生不同的结果。我的查询返回了更多的记录。我的查询有什么问题?我的查询和"正确"之间的区别是什么?查询下面呢?
答案 0 :(得分:0)
如果有类似的行,那么OR查询产生所有实例的查询没有错误,union union只生成一个实例。
OR查询返回关系结果..联合返回一组理论结果
答案 1 :(得分:0)
在第一个查询中,如果图书的ISBN与小说ISBN匹配,则所有科学记录将被加入,反之亦然,如果科学ISBN匹配,则所有小说记录已加入。