ホームページ  >  に質問  >  本文

MySQL で FULL OUTER JOIN を実行するにはどうすればよいですか?

<p>MySQL で <em>完全外部結合</em> を実行したいと考えています。出来ますか? MySQL は <em>完全外部結合</em> をサポートしていますか? </p>
P粉930534280P粉930534280423日前478

全員に返信(2)返信します

  • P粉022723606

    P粉0227236062023-08-24 11:52:41

    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

    P粉1487820962023-08-24 10:04:47

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

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

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

    リーリー


    上記のクエリは、

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

    返事
    0
  • キャンセル返事