Frage

Dies ist eine Art von SQL newbie Frage, glaube ich, aber hier geht.

Ich habe eine SQL-Abfrage (SQL Server 2005), die ich gemeinsam an einem Beispiel benutzerdefinierte Funktion gesetzt haben basiert:

SELECT 
    CASEID,
    GetNoteText(CASEID)
FROM 
( 
    SELECT 
        CASEID 
    FROM 
        ATTACHMENTS 
    GROUP BY 
        CASEID 
) i
GO 

die UDF funktionieren gut (es verkettet Daten aus mehreren Zeilen in einer verknüpften Tabelle, wenn das überhaupt wichtig ist), aber ich bin verwirrt über die „i“ nach dem FROM-Klausel. Die Abfrage arbeitet mit dem i in Ordnung, aber nicht ohne sie. Was ist die Bedeutung der „i“?

EDIT: Wie Joel unten erwähnt, es ist kein Schlüsselwort

War es hilfreich?

Lösung

Wenn Sie eine Unterabfrage in der FROM-Klausel zu verwenden, müssen Sie die Abfrage einen Namen geben. Da der Name nicht wirklich für Sie, etwas Einfaches wie ‚i‘ oder ‚a‘ wird oft gewählt. Aber Sie einen beliebigen Namen dort setzen könnten Sie wanted- gibt es keine Bedeutung zu ‚i‘ wie von selbst, und es ist sicherlich kein Schlüsselwort.

Wenn Sie eine wirklich komplexe Abfrage haben, müssen Sie Ihre Unterabfrage mit anderen Abfragen oder Tabellen verknüpfen. In diesem Fall wird der Name wichtiger und sollten Sie etwas Sinnvolles wählen.

Andere Tipps

Der i-Name, die (subquery), die erforderlich ist, und auch erforderlich für die weiteren beitritt.

In Kürze erhalten Sie haben Spalten in der äußeren Abfrage mit der Unterabfrage Namen voranstellen, wenn es widersprüchliche Spaltennamen zwischen verknüpften Tabellen sind, wie:

SELECT 
    c.CASEID, c.CASE_NAME,
    a.COUNT AS ATTACHMENTSCOUNT, o.COUNT as OTHERCOUNT,
    dbo.GetNoteText(c.CASEID)
FROM CASES c
LEFT OUTER JOIN
( 
    SELECT 
        CASEID, COUNT(*) AS COUNT
    FROM 
        ATTACHMENTS 
    GROUP BY 
        CASEID 
) a
ON a.CASEID = c.CASEID
LEFT OUTER JOIN
(
    SELECT 
        CASEID, COUNT(*) AS COUNT
    FROM 
        OTHER
    GROUP BY 
        CASEID 
) o
ON o.CASEID = c.CASEID

Der „i“ ist Ihre select-Anweisung eines effektiver Tabellenname zu geben. Es könnte auch geschrieben werden (ich glaube - ich kein MSSQLServer Typ bin) als "AS i"

.

Wie schon andere gesagt, es ist ein Tabellenname alias für die Unterabfrage.

Außerhalb der Unterabfrage, man kann i.CASEID verwenden, um in die Unterabfrage Ergebnisse zu verweisen.

Es ist nicht allzu nützlich in diesem Beispiel, aber wenn Sie mehrere Unterabfragen haben, ist es ein sehr wichtiges Werkzeug Begriffsklärung.

Auch wenn, würde ich eine bessere Variablennamen wählen. Auch "temp" ist besser.

Die i Namen Ihrer Unterabfrage so dass, wenn Sie eine komplexe Abfrage mit zahlreichen Unterabfragen und Sie müssen die Felder gelangt man so in eindeutiger Weise tun können.

Es ist gängige Praxis ist Ihren Subqueries kräftigere Namen geben Sie Ihre eigene Verwirrung zu vermeiden, wenn Sie in dem Schreiben mehr Anfragen anfangen, gibt es nichts Schlimmeres, dann mit zurück durch eine lange SQL-Anweisung zu bewegen, weil Sie vergessen haben, die mich. id ist die richtige oder die Tabelle / Abfrage c.name wird abgerufen aus.

Die Lektion gelernt hat, ist von der Person zu denken, die Ihren Code erben. Wie schon andere gesagt haben, wenn der Code wie folgt geschrieben worden war:

SELECT DT1.CASEID, GetNoteText(DT1.CASEID) 
FROM (
   SELECT CASEID 
   FROM ATTACHMENTS
   GROUP BY CASEID
) AS DT1 (CASEID);

dann gibt es eine erhöhte Wahrscheinlichkeit der Leser es heraus dargestellt haben würde und vielleicht sogar auf ‚DT1‘ abholen spielt damit auf eine ‚abgeleitete Tabelle‘.

„Abgeleitete Tabelle“ ist ein technischer Begriff eine Unterabfrage in der FROM-Klausel für die Verwendung.

Die SQL Server-Online-Syntax zeigt, dass table_alias in diesem Fall nicht optional ist; „Table_alias“ nicht in Klammern eingeschlossen und nach den Transact-SQL-Syntaxkonventionen, die Dinge in Klammern sind optional. Das Schlüsselwort „AS“ ist jedoch optional, da es in Klammer steht ...

derived_table [AS] table_alias [(spaltenalias [, ... n])]

FROM (Transact-SQL):
http://msdn.microsoft.com/en-us /library/ms177634(SQL.90).aspx

Transact-SQL-Syntaxkonventionen:
http://msdn.microsoft.com/en-us /library/ms177563(SQL.90).aspx

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top