7

Google 検索によると、MySQL は完全な外部結合をサポートしていないため、union および/または union all を介してシミュレートできます。ただし、これらは両方とも、本物の重複を削除するか、偽の重複を表示します。

正しく効率的な方法は何ですか?

この質問は関連しているようですが、答えが得られませんでした。

4

1 に答える 1

9

LEFT JOIN と RIGHT JOIN を使用できます。

SELECT * FROM tableA LEFT JOIN tableB ON tableA.b_id = tableB.id
UNION ALL
SELECT * FROM tableA RIGHT JOIN tableB ON tableA.b_id = tableB.id
WHERE tableA.b_id IS NULL

このトピックに関するウィキペディアにもいくつかの情報があります:完全外部結合

ウィキペディアの記事では、MySQL で UNION を使用することが提案されています。これは UNION ALL よりもわずかに遅くなりますが、さらに重要なのは、常に正しい結果が得られるとは限らないことです。重複した行が出力から削除されます。したがって、ここでは UNION の代わりに UNION ALL を使用することをお勧めします。

于 2010-08-10T08:38:18.993 に答える