INNER JOINとLEFT SEMI JOINの違い 質問する

INNER JOINとLEFT SEMI JOINの違い 質問する

INNER JOINとの違いは何ですかLEFT SEMI JOIN?

以下のシナリオでは、なぜ 2 つの異なる結果が得られるのでしょうか?

結果INNER JOINセットがかなり大きくなりました。誰か説明してもらえますか?table_1にのみ表示される内の名前を取得しようとしていますtable_2

SELECT name
FROM table_1 a
    INNER JOIN table_2 b ON a.name=b.name

SELECT name
FROM table_1 a
    LEFT SEMI JOIN table_2 b ON (a.name=b.name)

ベストアンサー1

は、両方のテーブルの列からデータを返すことができINNER JOIN、どちらかの側のレコードの値が重複して複数の一致を持つ場合があります。 はLEFT SEMI JOIN、左側のテーブルからのみ列を返すことができ、右側のテーブルに 1 つ以上の一致がある左側のテーブルの各レコードを 1 つずつ返します (一致の数に関係なく)。これは、次の式と同等です (標準 SQL の場合)。

SELECT name
FROM table_1 a
WHERE EXISTS(
    SELECT * FROM table_2 b WHERE (a.name=b.name))

もしあるなら複数右側の列に一致する行がある場合、 はINNER JOIN右側のテーブルの各一致に対して 1 行を返しますが、 はLEFT SEMI JOIN右側の一致する行の数に関係なく、左側のテーブルからの行のみを返します。そのため、結果に表示される行数は異なります。

table_2 にのみ表示される table_1 内の名前を取得しようとしています。

LEFT SEMI JOINその場合、使用する適切なクエリはaです。

おすすめ記事