Peki ANSI092 standardı oldukça kötü sözdizimi içerir. Doğal Birleştirmeler birdir ve KULLANIM Maddesi başka bir maddedir. IMHO, bir tabloya bir sütun eklenmesi kodu kırmamalı, ancak bir DOĞAL BİRLEŞTİRME çok korkunç bir şekilde kırılır. Kırmanın "en iyi" yolu derleme hatasıdır. Örneğin * bir yere SEÇ bile, bir sütunun eklenmesi olabilirderleme başarısız. Başarısız olmanın bir sonraki en iyi yolu çalışma zamanı hatasıdır. Daha kötüdür çünkü kullanıcılarınız görebilir, ancak yine de size bir şeyi bozduğunuza dair güzel bir uyarı verir. ANSI92 kullanır ve NATURAL birleştirmelerle sorgular yazarsanız, derleme zamanında bozulmaz ve çalışma zamanında kırılmaz, sorgu aniden yanlış sonuçlar vermeye başlar. Bu tür böcekler sinsidir. Raporlar yanlış gidiyor, potansiyel olarak mali açıklama yanlış.
NATURAL Joins'e aşina olmayanlar için. Her iki tabloda da bulunan her sütun adında iki tabloyu birleştirirler. 4 sütunlu bir anahtarınız olduğunda ve yazmaktan bıktığınızda gerçekten harika. Sorun, Tablo1'in DESCRIPTION adında önceden var olan bir sütuna sahip olması ve Table2'ye, oh bilmiyorum, mmm, DESCRIPTION gibi zararsız bir şey adında yeni bir sütun eklediğinizde ortaya çıkar ve şimdi iki tabloyu bir VARCHAR2'de birleştiriyorsunuz. (1000) serbest biçimli alan.
USING cümlesi, yukarıda açıklanan soruna ek olarak tam bir belirsizliğe yol açabilir. Başka bir SO gönderisinde , birisi bu ANSI-92 SQL'i gösterdi ve onu okumak için yardım istedi.
SELECT c.*
FROM companies AS c
JOIN users AS u USING(companyid)
JOIN jobs AS j USING(userid)
JOIN useraccounts AS us USING(userid)
WHERE j.jobid = 123
Bu tamamen belirsizdir. Hem Şirketler hem de kullanıcı tablolarına bir Kullanıcı Kimliği sütunu koydum ve herhangi bir şikayet yok. Şirketlerdeki Kullanıcı Kimliği sütunu, bu satırı değiştiren son kişinin kimliğiyse ne olur?
Ciddiyim, böyle bir belirsizliğin neden gerekli olduğunu kimse açıklayabilir mi? Neden doğrudan standarda dahil edilmiştir?
Bence Bill, kodlama yoluyla kopyalayıp yapıştıran geniş bir geliştirici tabanı olduğu konusunda haklı. Aslında, ANSI-92 söz konusu olduğunda bir tür olduğumu kabul edebilirim. Şimdiye kadar gördüğüm her örnek, birden çok birleşimin parantez içine yerleştirildiğini gösteriyordu. Dürüstlük, en iyi ihtimalle sql'deki tabloları seçmeyi zorlaştırıyor. Ancak daha sonra bir SQL92 evangilisti, bunun aslında bir birleştirme emrini zorlayacağını açıkladı. JESUS ... Gördüğüm tüm bu Kopyalama yapıştırıcıları artık bir birleştirme emrini zorluyor - bu, zamanın% 95'ini optimize edenlere, özellikle de bir kopya / pastaya bırakan bir iş .
Tomalak dediğinde doğru anladı,
insanlar sadece orada olduğu için yeni sözdizimine geçmiyor
Bana bir şey vermeli ve ben bir tersini görmüyorum. Ve bir tersi varsa, negatifler göz ardı edilemeyecek kadar büyük bir albatrostur.