なので、USING構文は使用しません。
- 私の結合のほとんどはそれに適していません(一致しているのと同じフィールド名ではない、および/または結合内の複数の一致)および
- 3つ以上のテーブルがある場合にそれが何に変換されるかはすぐにはわかりません
つまり、「id」列と「id_2」列を持つ3つのテーブルを想定すると、
T1 JOIN T2 USING(id) JOIN T3 USING(id_2)
なる
T1 JOIN T2 ON(T1.id=T2.id) JOIN T3 ON(T1.id_2=T3.id_2 AND T2.id_2=T3.id_2)
または
T1 JOIN T2 ON(T1.id=T2.id) JOIN T3 ON(T2.id_2=T3.id_2)
または何か他のもの?
特定のデータベースバージョンでこれを見つけるのはかなり簡単な作業ですが、すべてのデータベースで一貫しているという確信はあまりありません。また、コードを維持する必要があるのは私だけではありません。他の人もそれが何に相当するかを知っている必要があります。
WHEREとONの明らかな違いは、結合が外部であるかどうかです。
単一のIDフィールドを持つT1、値1を含む1つの行、およびIDとVALUEフィールドを持つT2(1つの行、ID =1、VALUE =6)を想定すると、次のようになります。
SELECT T1.ID, T2.ID, T2.VALUE FROM T1 LEFT OUTER JOIN T2 ON(T1.ID=T2.ID) WHERE T2.VALUE=42
WHEREは一致する必要があるため、行は表示されませんが、
SELECT T1.ID, T2.ID, T2.VALUE FROM T1 LEFT OUTER JOIN T2 ON(T1.ID=T2.ID AND T2.VALUE=42)
値を含む1行を表示します
1, NULL, NULL
ONは結合のマッチングにのみ必要であるため、これは外部であるためオプションです。