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です。