8

テーブル A があるとします。

itemid mark
1      5
2      3

およびテーブル B:

itemid mark
1      3
3      5

A.itemid=B.itemid で A*B を右方向と左方向の両方で結合したい。すなわち結果:

itemid A.mark B.mark
1      5      3
2      3      NULL
3      NULL   5

MySQL で 1 つのクエリでそれを行う方法はありますか?

4

3 に答える 3

8

これは完全外部結合と呼ばれ、ドキュメントから判断すると、MySQL ではネイティブにサポートされていません。リンク先のページへのコメントで説明されているように、UNION を使用してこの制限を回避できます。

[編集] 他の人がスニペットを投稿したので、どうぞ。リンク先のページで説明を見ることができます。

SELECT *
FROM A LEFT JOIN B ON A.id = B.id
UNION ALL
SELECT *
FROM A RIGHT JOIN B ON A.id = B.id
WHERE A.id IS NULL
于 2008-08-13T10:15:39.293 に答える
2

いくつかの作業を行うことができますが、ここにいくつかのSQLがあります

select distinct T.itemid, A.mark as "A.mark", B.mark as "B.mark"
    from (select * from A union select * from B) T 
    left join A on T.itemid = A.itemid 
    left join B on T.itemid = B.itemid;

これは、元のテーブル (この場合、これは副選択テーブル T) のすべての行を返す左結合に依存します。結合されたテーブルに一致するものがない場合、列は NULL に設定されます。

于 2008-08-13T09:56:46.787 に答える
-1

これは、SQL Serverで私にとってはうまくいきます:

select isnull(a.id, b.id), a.mark, b.mark
from a 
full outer join b on b.id = a.id
于 2008-08-13T09:58:23.133 に答える