hayır, sırası önemli değildir, katılır. Sorgularınız, SELECT *
seçimlerinizi SELECT a.*, b.*, c.*
olarak değiştirdiğiniz sürece aynı sonuçları döndürecektir. ve (güncellenmiş) işler çok daha karmaşıktır - (LEFT
, RIGHT
veya FULL
) OUTER
için
evet, sipariş konularda, katılır.
a LEFT JOIN b
ON b.ab_id = a.ab_id
LEFT JOIN c
ON c.ac_id = a.ac_id
:
İlk
dış katılır böylece a LEFT JOIN b
(değişmeli ve birleşme) şeklinde daki örneklerde özellikleri, bu yüzden birleştirici değildir ya b LEFT JOIN a
Outer katılır aynı değildir, değişmeli değildir
eşdeğerdir:
a LEFT JOIN c
ON c.ac_id = a.ac_id
LEFT JOIN b
ON b.ab_id = a.ab_id
ama:
a LEFT JOIN b
ON b.ab_id = a.ab_id
LEFT JOIN c
ON c.ac_id = a.ac_id
AND c.bc_id = b.bc_id
eşdeğer değildir:
a LEFT JOIN c
ON c.ac_id = a.ac_id
LEFT JOIN b
ON b.ab_id = a.ab_id
AND b.bc_id = c.bc_id
başka (umutla basit) birleşme, örneğin. (a LEFT JOIN b) LEFT JOIN c
olarak düşünün:
a LEFT JOIN b
ON b.ab_id = a.ab_id -- AB condition
LEFT JOIN c
ON c.bc_id = b.bc_id -- BC condition
Bu a LEFT JOIN (b LEFT JOIN c)
eşdeğerdir:
a LEFT JOIN
b LEFT JOIN c
ON c.bc_id = b.bc_id -- BC condition
ON b.ab_id = a.ab_id -- AB condition
biz "güzel" ON
koşullara sahip diye. Hem ON b.ab_id = a.ab_id
hem de c.bc_id = b.bc_id
eşitlik denetimleridir ve NULL
karşılaştırmaları içermez.
Hatta diğer operatörler ya da benzeri daha karmaşık olanlarla koşullara sahip olabilir: ON a.x <= b.x
veya ON a.x = 7
veya ON a.x LIKE b.x
veya ON (a.x, a.y) = (b.x, b.y)
ve iki sorgular hala eşdeğer olacaktır.
Ancak eğer durum daha sonra iki sorgular eşdeğer olmaz, b.ab_id IS NULL
olsaydı, örneğin COALESCE()
gibi null ile ilgilidir bu alan IS NULL
veya bir fonksiyonun herhangi. Düzenli Bağlantılar için
Merhaba Beny, sorumun içindeki kod bir soyutlamadır. A'dan B'ye veya A'dan C'ye katılma konusunda endişe duymuyorum, sadece aynı sonuçları veren sözdizimini bilmesini istiyorum. –