MySQL で FULL OUTER JOIN を実行するにはどうすればよいですか?
P粉930534280
P粉930534280 2023-08-23 15:16:38
0
2
477
<p>MySQL で <em>完全外部結合</em> を実行したいと考えています。出来ますか? MySQL は <em>完全外部結合</em> をサポートしていますか? </p>
P粉930534280
P粉930534280

全員に返信(2)
P粉022723606

Pablo Santa Cruz による回答は正しいですが、このページに遭遇してさらに説明が必要な場合は、ここに詳細な内訳を示します。

テーブルの例

次のテーブルがあるとします:

リーリー

内部結合

以下に示す内部結合:

リーリー

では、以下に示すように、両方のテーブルに表示されるレコードのみを表示できます。 リーリー

内部結合は明示的に双方向であるため、方向 (例: 左または右) がありません。両方の側が一致する必要があります。

外部結合

一方、外部結合は、別のテーブル内で一致しない可能性のあるレコードを検索するために使用されます。したがって、

接続のどちら側でレコードの欠落を許可するかを指定する必要があります。

LEFT JOIN

RIGHT JOIN は、LEFT OUTER JOINRIGHT OUTER JOIN の短縮形です。フルネームの下ではそれらを使用します。外部結合と内部結合の概念を強化します。 左外部結合

以下に示す左外部結合:

リーリー

... は、次のように、右側のテーブルに一致があるかどうかに関係なく、左側のテーブルからすべてのレコードを取得します。 リーリー

右外部結合

右外部結合 (以下に示すように):

リーリー

...次のように、左側のテーブルに一致するレコードがあるかどうかに関係なく、右側のテーブルからすべてのレコードを取得します。 リーリー

完全外部結合

完全な外部結合では、もう一方のテーブルに一致があるかどうかに関係なく、両方のテーブルのすべてのレコードが得られます。一致しない場合は両側で NULL になります。結果は次のようになります:

リーリー

ただし、Pablo Santa Cruz 氏が指摘したように、MySQL はこれをサポートしていません。次のように、左結合と右結合の UNION を使用してエミュレートできます。 リーリー

UNION

は、「これら 2 つのクエリを実行し、その結果を積み重ねる」と考えることができます。一部の行は最初のクエリから取得され、一部の行は 2 番目のクエリから取得されます。

MySQL の

UNION

は完全な重複を排除することに注意することが重要です。ここでは両方のクエリに Tim が表示されますが、UNION の結果には Him が 1 回だけリストされます。私の同僚のデータベース専門家は、この動作に依存すべきではないと考えています。したがって、これをより明確にするために、2 番目のクエリに

WHERE

句を追加できます。 リーリー 一方、何らかの理由で 重複を表示したい場合は、UNION ALL を使用できます。

いいねを押す +0
P粉148782096

MySQL には 完全な接続 はありませんが、エミュレートすることはできます

このスタック オーバーフローの質問から転写されたコードの場合 次のようになります。

2 つのテーブル t1 と t2 があります:

リーリー


上記のクエリは、

完全外部結合操作によって重複行が生成されない特殊なケースに適しています。上記のクエリは、UNION 集合演算子に依存して、クエリ パターンによって導入された重複行を削除します。 2 番目のクエリで anti-join パターンを使用し、次に UNION ALL セット演算子を使用して 2 つのセットを結合することで、重複行の導入を回避できます。完全外部結合が重複行を返すより一般的なケースでは、次のようにすることができます: リーリー

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!