MySQL には直接完全外部結合のサポートがないことと回避策
質問: MySQL は、一致基準に関係なく、結合された両方のテーブルのすべての行が確実に含まれるネイティブ完全外部結合を提供しますか?
答え: いいえ、MySQL は完全外部結合を直接サポートしていません。 ただし、代替手法を使用してこの機能を効果的に複製できます。
アプローチ 1: UNION を活用する
このアプローチは、出力に重複行が生成されるリスクがない場合に適しています。 クエリは、LEFT JOIN
:RIGHT JOIN
を使用して UNION
と
<code class="language-sql">SELECT * FROM t1 LEFT JOIN t2 ON t1.id = t2.id UNION SELECT * FROM t1 RIGHT JOIN t2 ON t1.id = t2.id;</code>
アプローチ 2: アンチ結合を使用した UNION ALL の採用
行が重複する可能性があるシナリオでは、より堅牢な方法が必要です。これには、UNION ALL
をアンチ結合とともに使用して冗長性を排除することが含まれます:
<code class="language-sql">SELECT * FROM t1 LEFT JOIN t2 ON t1.id = t2.id UNION ALL SELECT * FROM t1 RIGHT JOIN t2 ON t1.id = t2.id WHERE t1.id IS NULL;</code>
アンチ結合 (WHERE t1.id IS NULL
部分の RIGHT JOIN
) は、UNION ALL
操作が結果を結合する前に重複を除外します。 これにより、完全外部結合の完全かつ正確なエミュレーションが保証されます。
以上がMySQLは完全な外側結合をサポートしていますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。