2010-07-16 11 views
9

Können wir mehrere Alias-Namen für eine einzelne Tabelle haben?Mehrere Alias-Namen für eine Tabelle

+0

Warum möchten Sie? Haben Sie eine bestimmte Abfrage, die nicht funktioniert? –

+0

für was Sie das brauchen? –

+1

Self Joins oder Tabellen, die in mehreren Rollen leben. Ein Beispiel für Letzteres könnte eine Datumsdimensionstabelle sein, die mit einer Faktentabelle mit mehreren Daten verknüpft ist. – ConcernedOfTunbridgeWells

Antwort

11

Ja. Sie müssen dies zum Beispiel für ein self join, tun f Sie eine Tabelle haben eine Hierarchie zu speichern:

create table Foo (
    FooID int 
    ,ParentFooID int 
    ,[columns] 
) 

Sie können eine Verknüpfung tun, um die Kinder von Eltern zu bekommen, die eine bestimmte Bedingung mit einer Abfrage wie erfüllen:

Select b.* 
    from Foo a 
    join Foo b 
    on a.FooID = b.ParentFooID 
    and [some condition filtering a] 
+1

+1 für Inferenzmöglichkeiten! –

+0

Aber es wird die Leistung beeinflussen oder nicht? –

+0

Der Abfrageoptimierer muss alles Notwendige tun, um das Verknüpfungsprädikat aufzulösen. Wenn die Tabelle beispielsweise groß ist und einen Index für ParentFooID hat, muss sie wahrscheinlich Index-Lookups durchführen, um den Join FooID - ParentFooID aufzulösen. Das Spiel wird immer mit einigen Ressourcen verbunden sein. – ConcernedOfTunbridgeWells

3

Nein, nicht in derselben Tabelle, aber Sie können die gleiche Tabelle zweimal auswählen und jedem einen anderen Alias ​​geben.

Dadurch können Sie dann die gleiche Tabelle für einen anderen Zweck innerhalb einer einzigen Abfrage verwenden.

+0

Aber es wird die Leistung beeinflussen oder nicht? –

+0

Ja, wenn Sie die Tabelle zweimal auswählen, muss sie doppelt so viel arbeiten. Die Leistung hängt davon ab, wie sie verwendet werden, zu welchem ​​Zweck sie verbunden sind und welche Indizes und Statistiken für den Abfrageoptimierer verfügbar sind. –

+0

Da die Abfrage von Chris keine Join-Bedingung (implizit oder explizit) hat, wird eine kartesische Verknüpfung erwartet - d. Jede einzelne Zeile in der Tabelle wird mit allen Zeilen in derselben Tabelle verknüpft. Wenn Sie also 20 Zeilen in der Tabelle hätten, wäre Ihr Ergebnissatz 400 Zeilen! Das ist viel schlimmer als doppelt so viel Arbeit. Es sind jedoch nicht die Aliase, die die Arbeit verursachen - es ist die kartesische Verbindung. –

Verwandte Themen