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.
Das Problem ist mit deinem Beitritt zu InterestRunDetail
. Sie treten doppelt bei IntRunCode
bei.
Die richtige Abfrage sollte lauten:
%Vor%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!
Tags und Links sql sql-server