0

2つの異なるテーブルを結合する検索クエリを作成しました。私は両方に左結合を入れました。これで、最初のテーブルには60レコードが含まれますが、2番目のテーブルには30しかありません。検索クエリで、60レコードすべてを返す必要があるかどうかを確認しました。現在、30を返しています。同じクエリ。

A. 、Bを選択します。Aから左からA.Id=B.AIdでBに参加します。ここで、A.name = IfNull('tst'、A.name)AND B.class = IFNull('c'、B.class)です。

案内してください、ありがとう。

4

2 に答える 2

0

JOIN操作(すべての種類のJOIN操作、LEFT、RIGHT、INNER、OUTER)には、結合されたテーブルから組み立てられた新しい仮想テーブルを作成する目的があることを覚えておくのが賢明です。

このJOINされた仮想テーブルには何が含まれているはずですか?あなたの場合、あなたの列A.IDとあなたの列B.AIDの意味は何ですか?

  1. AテーブルにA.ID列の値がB.AIDで何度も発生しない行がありますか?
  2. A.IDで何度も発生しないB.AID列値を持つ行がBテーブルにありますか?

質問1の答えが「はい」で質問2が「いいえ」の場合、LEFTJOINはあなたが望むものを提供します。ただし、クエリを単純化してください。これを試して。

 SELECT A.*, B.*
   FROM A
   LEFT JOIN B ON A.ID = B.AID

Bからの対応する行がない、Aからの行のみが必要な場合は、これを試してください。

 SELECT A.*
   FROM A
   LEFT JOIN B ON A.ID = B.AID
   WHERE B.AID IS NULL

両方の質問に対する答えが「はい」の場合は、次のようにすることができます。

 SELECT A.*, B.*
   FROM A
   OUTER JOIN B ON A.ID = B.AID

しかし、これは非常に慎重に検討する必要があります。

于 2012-06-04T18:25:17.600 に答える
0

このロジックを試してみてください。うまくいくことを願っています。

select A.*,B.* from A left join B on A.Id=B.AId where B.Id != ''
于 2012-06-04T19:45:54.020 に答える