Bir filtre JOIN
koşulunda işlevsel olarak girerse (yani, yalnızca bir filtre değil, gerçek bir katılım koşulu), bu birleştirmenin ON
maddesinde görünmelidir.
değer belirterek: Bunun yerine WHERE
fıkrada yerine takdirde katılmak INNER
ise
, performanslar aksi takdirde farklıdır, aynıdır. Yorumlarda belirtildiği gibi, sonuç neticede farklı değildir. gerçekten bir OUTER JOIN
durum metotunun bu filtreler birinci orada mevcut olmalıdır kayıtları ima olarak durumun OUTER
doğasını ("hiçbir kayıt olduğunda bile katıl") iptal olduğunda
WHERE
fıkrada filtreyi Yerleştirme yer. Örnek: t2.column = 5
birleştirme dış tersine olarak beklenen t2'den kayıtları motoru söyler olarak
... table1 t LEFT JOIN table2 u ON ... AND t2.column = 5
,
... table1 t LEFT JOIN table2 u ON ...
WHERE t2.column = 5
yanlış doğrudur. Bunun istisnası, bir IS NULL
filtre olabilir, örneğin WHERE t2.column IS (NOT) NULL
LEFT
ve RIGHT
metotunun OUTER
katılır olan birleşimler (şartlı dış oluşturmak için uygun bir yol aslında katılır).
Yardım edin.
Bu yanıt yanlış yazılmış ve bir parça yazılmıştır. 1. INNER JOIN için herhangi bir koşul, araya giren OUTER JOIN olmadığı sürece ON yerine bir WHERE olabilir. 2. LEFT JOIN koşulunu ON'tan WHERE'ye taşıdığınızda, performans genel olarak sonuçtan farklı olduğu için, performansın önemi yoktur. 3. Bu fark genel olarak "DIŞ JOIN'i bir İÇERİK BİR BAĞLANTI 'ya dönüştürmez". – philipxy
@philipxy haklısınız, biraz temizlemeye çalıştım – Sebas
Ne '' bir filtrenin işlevsel olarak bir JOIN koşuluna girer '' veya '[bir filtre] gerçek bir birleştirme koşulu değil, sadece bir filtre' anlamına gelir? Her neyse 'sadece bir filtre' nosyonu faydalı değildir, çünkü 'c ve d' JOIN ON 'ifadesinin anlamı' JOIN ON WHERE d 'ile aynıdır. (Aslında, SQL standardı * JOIN WHERE cinsinden JOIN ON'u tanımlar.) Benzer şekilde "koşulun DIŞI niteliğini iptal eder" * sadece bir şey iletmez *. Hangi korkuyu tırnak içine aldığınızdan (ki bu da kendiliğinden belirsiz) ekliyorsunuz (“kayıt olmadığında bile katılın”). Açıklamıyorsun. – philipxy