如何在MySQL中执行此查询使用左连接、右连接或内部连接应该使用哪个?
我有三张这样结构的桌子。我希望有一个查询,结果是: 如果我做这个查询如何在MySQL中执行此查询使用左连接、右连接或内部连接应该使用哪个?,mysql,sql,database,join,Mysql,Sql,Database,Join,我有三张这样结构的桌子。我希望有一个查询,结果是: 如果我做这个查询 table book: BookCode| AuthorShortN |Title ============================================ 101 | Anton B | THe Book of Leaves 102 | JJ. Abram | Wish Upon A Star 103 | Anonymous | Secret of Universe 104 | Anton B |
table book:
BookCode| AuthorShortN |Title
============================================
101 | Anton B | THe Book of Leaves
102 | JJ. Abram | Wish Upon A Star
103 | Anonymous | Secret of Universe
104 | Anton B | The Sentinel
table author:
AuthorID|AuthorFullName |Nationality
=====================================
A01 | Anton Balwin | USA
J02 | Johannes J Abram| UK
table bookauthor:
BookCode|AuthorID
=================
101 | A01
102 | J02
103 | X01
104 | A01
它不会显示第103行|匿名|宇宙秘密
,因为作者不在表Author中
我想要的是:
select *
from book tb , author ta, bookauthor tba
where tb.BookCode = tba.BookCode and tba.AuthorID = ta.AuthorID
如何修复查询以生成这样的结果
非常感谢您的帮助。将给出左表中的所有结果,无论右表中是否有相应的条目
BookCode| Title | AuthorID | AuthorShortN
===========================================================
101 | THe Book of Leaves|A01 | Anton Balwin
102 | Wish Upon A Star |J02 | Johannes J Abram
103 | Secret of Universe|NULL | Anonymous
104 | The Sentinel |A01 | Anton Balwin
另外,问题的主题之外-AuthorShortN字段不应该在author表中吗?您正在查找允许空值的表上的左联接:
SELECT *
FROM book tb
LEFT JOIN author ta ON tb.BookCode = ta.AuthorID
LEFT JOIN bookauthor tba ON ta.AuthorID = tba.BookCode;
请注意,您的示例正确输出在AuthorShortN中查找空值,并且您的数据中实际上具有匿名性。BookAuthor的内部联接假定即使在作者未知的情况下,此表中也有条目,正如您的数据所示。我很抱歉并感谢您指出的,这是一个打字错误,
103
的作者应该是匿名的
而不是空的内部联接
=联接
。此表是正确的,因为关于作者更详细的信息将出现在tbl author
中,而tbl book
中只包含简称
。无论如何,谢谢你调查此事。。
SELECT tb.BookCode, tb.Title, ta.AuthorID, tb.AuthorShortN
FROM book AS tb
INNER JOIN bookauthor AS tba ON tba.BookCode=tb.BookCode
LEFT JOIN author AS ta ON tba.AuthorID=ta.AuthorID