2011-02-28 15 views
9

Bu, üç doğal birleştirmenin doğru yolu mu? :3-Tabla Doğal Katılma Nasıl Yapılır?

SELECT C.name, P.name 
FROM client C NATURAL JOIN order O NATURAL JOIN product P 
WHERE O.date > '15.02.2011' 
+0

Ne tür bir veritabanı kullanıyorsunuz? (SQL Server, MySQL, vb.) – dana

+1

eski mysql sunucusu –

+0

@dana, SQL Server'da "doğal birleştirme" yoktur. – Pacerier

cevap

17

Bu gerçekten doğal katılır için tipik sözdizimi. Ancak, tüm veritabanları doğal birleşimleri desteklemiyor (örneğin, SQLServer'ın desteklediğine inanmıyorum) ve doğal birleştirme için bir ANSI standardı olduğuna inanmıyorum.

doğal genellikle kaçınılması gereken tehlikeli ve bir şey olarak kabul edilir katılır Not olduğunu - onlar bir sorgu bağlı olduğunu katılmak ilişkiyi gizleyebilir ve bu kodun anlamı değişir veri modeli değişmiş ise sorguları neden olabilir çünkü bu. Bu sözdizimini kullanan

+0

NATURAL JOIN'ler ne yazık ki ANSI'dir, ancak kaçınılmaları gerektiğine katılıyorum. –

+0

+1: Anlaşılmış, (imho) mantık açık ve örtük olmamalıdır. Bu nedenle, INNER JOIN kullanın. – MatBailie

+12

'NAUTRAL JOIN', geçerli bir SQL-92 sözdizimi. Gerçekten ilişkisel bir DBMS 'NATURAL JOIN'de ihtiyacınız olan tek birleşimdir. Herhangi bir araç yanlış ellerde tehlikelidir. – onedaywhen

0

, daha önce bahsedildiği gibi tehlikeli kabul edilir. T1 (id, isim, yaş) T2 (id, yaş, şehir)

SELECT T1.id, T1.name, T1.age, T2.age 
FROM T1 NATURAL JOIN T2 

sütun katılmak için kullanılmalıdır: Aşağıdaki örneği inceleyin? Kimlik mi, yaş mı? Tanımlanmamıştır. Her satıcı bu tür sorunları çözmek için kendi yolunu uygulayabilir.

yerine bu sözdizimi, geleneksel katılmak sözdizimi kullanarak göz önünde bulundurun: seçtiğiniz SQL ürünü bu özelliği desteklemiyorsa zaman

SELECT T1..... 
FROM T1 INNER JOIN T2 on T1.id=T2.id 
+0

Soruyu sen mi çözdün? Bir satıcı tarafından "NATURAL JOIN" in uygun şekilde uygulanması, daha iyi şema tasarımını desteklemelidir. Seninki saman adam argümanı. "INNER JOIN" sözdizimi SQL-92'dir ("NATURAL JOIN" olduğu gibi). "Geleneksel" eşdeğer birleştirme sözdizimini "FROM T1, T2 WHERE T1.id = T2.id" olarak düşünürdüm. – onedaywhen

+0

NATURAL JOIN SQL-92'de standart olsa da, önde gelen DBMS'lerin bazı satıcıları desteklemiyor. "Geleneksel" sözdizimini kullanmak benimki kadar yaygın değildir. Ne demek istediğimi tarif etmek için "geleneksel" yerine "ortak" yazmalıyım. –

1

Mimer SQL-92 validator kullanın sözdizimini kontrol etmek. order ve date'un ayrılan kelimeler olduğunu öğrenmelisiniz. Bunları sırasıyla my_order ve my_date olarak değiştirin ve sonra sizinki geçerli bir Transitional SQL-92 sözdizimi olduğunu keşfedeceksiniz.