Gibt es einen Namen, der eine SELECT-Anweisung innerhalb einer WHERE-Klausel beschreibt? Ist das gut / schlecht?
Wäre das eine bessere Alternative?
%Vor%Es ist weit weniger elegant, scheint aber schneller zu laufen als meine vorherige Version. Ich mag es nicht, weil es in der GUI nicht sehr deutlich angezeigt wird (und es muss von SQL-Anfängern verstanden werden). Ich könnte es in zwei separate Abfragen aufteilen, aber dann beginnen die Dinge überladen zu werden ...
N.B. Ich brauche mehr als nur Datum und Ergebnis (z. B. Name)
Es ist überhaupt keine schlechte Übung. Sie werden normalerweise als SUBQUERY , SUBSELECT oder NESTED QUERY bezeichnet.
Es ist eine relativ teure Operation, aber es ist durchaus üblich, dass es im Umgang mit Datenbanken viele Unterabfragen gibt, da dies die einzige Möglichkeit ist, bestimmte Arten von Datenoperationen durchzuführen.
Es gibt einen viel besseren Weg, um Ihr gewünschtes Ergebnis zu erreichen, indem Sie SQL Server verwenden analytische (oder windowing) Funktionen .
%Vor%Wenn Sie mehr als nur die Kombination aus Datums- und Höchstpunktzahl benötigen, können Sie Ranglistenfunktionen verwenden, z. B .:
%Vor%Sie können RANK () anstelle von ROW_NUMBER () , wenn mehrere Datensätze zurückgegeben werden sollen, wenn beide denselben MAX (Score) haben.
Dies ist eine korrelierte Unterabfrage.
(Es ist eine "verschachtelte" Abfrage - dies ist jedoch sehr nicht-technische Begriff)
Die innere Abfrage nimmt Werte aus der äußeren Abfrage (WHERE st.Date = ScoresTable.Date) und wird daher für jede Zeile in der äußeren Abfrage einmal ausgewertet.
Es gibt auch eine nicht korrelierte Form, in der die innere Abfrage unabhängig ist, da diese nur einmal ausgeführt wird.
z.B.
%Vor%Es gibt nichts Falsches an der Verwendung von Unterabfragen, außer dort, wo sie nicht benötigt werden:)
Ihre Anweisung kann als Aggregatfunktion wiederbeschreibbar sein, abhängig davon, welche Spalten Sie in Ihrer SELECT-Anweisung benötigen.
%Vor%In Ihrem Fall-Szenario, warum nicht GROUP BY und HAVING-Klausel anstelle der JOINING-Tabelle zu sich selbst verwenden. Sie können auch andere nützliche Funktionen verwenden. siehe diesen Link
Unterabfrage ist der Name.
Manchmal ist es erforderlich, aber gut / schlecht hängt davon ab, wie es angewendet wird.
Tags und Links sql select where-clause