SQL構文——left join on多条件

2584 ワード

left join on+多条件とwhereの違い
ポイント
まず一致し、where条件をフィルタします.
本稿では,両者の違いをいくつかの例で説明する.
表1:product
id
amount
1
100
2
200
3
300
4
400
表2:product_details
id
weight
exist
2
22
0
4
44
1
5
55
0
6
66
1
1.単一条件
select * from product a
left join  product_details b
on a.id  = b.id

左の表を基準として一致し、結果:
id
amount
id
weight
exist
1
100
null
null
null
2
200
2
22
0
3
300
null
null
null
4
400
4
44
1
2.条件はonとwhereで区別する
クエリー1:
SELECT * FROM product LEFT JOIN product_details
ON (product.id = product_details.id)
AND   product.amount=200;

結果:
id
amount
id
weight
exist
1
100
null
null
null
2
200
2
22
0
3
300
null
null
null
4
400
null
null
null
onのすべての条件をマッチング条件とし,一致しない右表はnullである.クエリ2:
SELECT * FROM product LEFT JOIN product_details
ON (product.id = product_details.id)
WHERE product.amount=200;

id
amount
id
weight
exist
2
200
2
22
0
一致してからフィルタリングすると、結果は1つのレコードしかありません.
3.where XXX is null状況
この文を使用して、onの後の条件に一致しないレコードを削除します.where XXX is not nullは、onの後の条件に合致するレコードをフィルタリングすることを示す.count idのような左テーブルのみを必要とするデータによく使用されます.
SELECT a.* FROM product a LEFT JOIN product_details b
ON a.id=b.id AND b.weight!=44 AND b.exist=0
WHERE b.id IS NULL;

結果:
id
amount
1
100
3
300
4
400
直感的に見ると、id=2の記録だけが上の3つの条件に完全に一致しているため、この記録をスクリーニングし、他の3つの記録を保持し、この場合、この3つの記録の右の表はnullである.onの後の条件に合わないものをフィルタします.(a.id=b.id AND b.weight!=44 AND b.exist=0). !(a.id=b.id AND || !(b.weight!=44) || !(b.exist=0). (a.id != b.id AND || (b.weight = 44) || ( b.exist! = 0). 論理ANDと論理OR式で、そのオペランドは左から右に評価されます.1番目のパラメータが判断操作結果を十分に行うと、2番目のパラメータは評価(短絡効果)されません.
次の文は、その文と同じ効果があります.(ここで同じことは、最後に左の表のデータだけを使用することです.右の表のデータを書くと違います)
SELECT a.* FROM product a LEFT JOIN product_details b
ON a.id=b.id
WHERE b.id is null OR b.weight=44 OR b.exist=1;

onの否定条件をwhereに書いた後、効果は同じです.
注意:LEFTJOINを使用して、いくつかのテーブルに存在しない記録を探している場合は、WHEREセクションのcol_をテストする必要があります.name IS NULL、MYSQLは、一致するLEFTJOIN条件をクエリした後、より多くのローの検索を停止します(特定のコンビネーションキーの下).
参照先:https://blog.csdn.net/czhphp/article/details/18657341