SQL Innerer Join. ON-Bedingung vs WHERE-Klausel

7

Ich bin damit beschäftigt, eine Abfrage mit der alten Syntax in die neue Joinsyntax zu konvertieren. Die Essenz meiner Abfrage lautet wie folgt:

Ursprüngliche Abfrage

%Vor%

Neue Abfrage

%Vor%

In diesem Beispiel gibt "Ursprüngliche Abfrage" 46 Zeilen zurück, wobei "Neue Abfrage" über 800 zurückgibt

Kann mir jemand den Unterschied erklären? Ich hätte angenommen, dass diese Abfragen identisch sind.

    
Russell 22.06.2012, 14:20
quelle

2 Antworten

17

Das Problem ist mit deinem Beitritt zu InterestRunDetail . Sie treten doppelt bei IntRunCode bei.

Die richtige Abfrage sollte lauten:

%Vor%     
Kevin Aenmey 22.06.2012, 14:24
quelle
4

Die "neue Abfrage" ist diejenige, die mit dem aktuellen ANSI SQL-Standard für JOINs kompatibel ist.

Auch finde ich Abfrage # 2 viel sauberer :

  • Sie sind fast gezwungen, über die Join-Bedingung (en) zwischen zwei Tabellen nachzudenken und diese anzugeben - Sie werden in Ihrer Abfrage nicht versehentlich kartesische Produkte haben. Wenn Sie zehn Tabellen, aber nur sechs Join-Bedingungen in Ihrer WHERE -Klausel auflisten, erhalten Sie viel mehr Daten zurück als erwartet!

  • Ihre WHERE -Klausel ist nicht mit Join-Bedingungen überladen und somit ist sie sauberer, weniger unordentlich, einfacher zu lesen und zu verstehen

  • Der Typ deines JOIN (ob INNER JOIN , LEFT OUTER JOIN , CROSS JOIN ) ist normalerweise viel einfacher zu sehen - da du es buchstabierst. Mit der "Old-Style" -Syntax ist der Unterschied zwischen diesen Join-Typen ziemlich schwer zu sehen, irgendwo in Ihren Losen von WHERE -Kriterien vergraben .....

Funktional sind die beiden identisch - # 1 könnte früher oder später von einigen Abfrage-Engines veraltet sein.

Siehe auch Aaron Bertrands exzellentes Schlechte Gewohnheiten zu treten - mit alten Stil JOIN Syntax Blog-Post für weitere Informationen - und während Sie dabei sind - lesen Sie alle " schlechte Angewohnheiten zu kicken "Beiträge - alle sehr es lohnt sich!

    
marc_s 22.06.2012 14:24
quelle

Tags und Links