1
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

このような構造のテーブルが 3 つあります。そして、結果が次のようになるようなクエリが必要です。

このクエリを実行すると

select * 
from book tb , author ta, bookauthor tba 
where tb.BookCode = tba.BookCode and tba.AuthorID = ta.AuthorID

row 103 | Anonymous | Secret of UniverseAuthor がテーブル author にないため、表示されません。

そして私が欲しいのは:

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

そのような結果を生成するようにクエリを修正する方法は?

助けてくれてどうもありがとう。

4

2 に答える 2

0

Left Joinは、右側のテーブルに対応するエントリがあるかどうかに関係なく、左側のテーブルからすべての結果を取得します。

SELECT *
FROM book tb
LEFT JOIN author ta ON tb.BookCode = ta.AuthorID
LEFT JOIN bookauthor tba ON ta.AuthorID = tba.BookCode;

また、質問のトピック外 - AuthorShortN フィールドを作成者テーブルに入れるべきではありませんか?

于 2013-09-04T05:56:56.990 に答える
0

ヌルを許可するテーブルで左結合を探しています。

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

例の正しい出力は AuthorShortN で null を探し、実際にはデータに Anonymous があることに注意してください。BookAuthor への内部結合は、作成者が不明な場合でも、このテーブルにエントリがあることを前提としています。

于 2013-09-04T06:02:20.197 に答える