2011-11-03 15 views
7

muszę zapytać, jak można używać aliasu w kwerendę wybierającą,Użycie aliasu Wybierz Query

muszę to

SELECT (Complex SubQuery) AS A, (Another Sub Query WHERE ID = A) FROM TABLE 
+4

Podejrzewam, że odpowiedź jest zmienić 'wyrażenie złożone SubQuery' skalarnego w tabeli, ale wypowiedzi ciężko jest debugować kod, którego nie widzimy. – onedaywhen

+0

Zgadzam się z Tobą. Muszę sprawić, aby ta kwerenda była wydajna. – user960567

Odpowiedz

12

Nie można tego zrobić:

SELECT (Complex SubQuery) AS A, (Another Sub Query WHERE ID = A) FROM TABLE 

Można jednak zrobić to:

SELECT (Another Sub Query WHERE ID = A.somecolumn) 
FROM table 
JOIN SELECT (Complex SubQuery) AS A on (A.X = TABLE.Y) 

Lub

SELECT (Another Sub Query) 
FROM table 
WHERE table.afield IN (SELECT Complex SubQuery.otherfield) 

Problem polega na tym, że nie może odnosić się do aliasów tak w klauzulach SELECT i gdzie, bo nie oceniano przez czas wybierz lub gdzie część jest wykonywana.
Można także użyć klauzuli having, ale mając klauzule nie używaj indeksów i powinno się ich unikać, jeśli to możliwe.

+0

?? Być może chodziło o: "WHERE ID = A.SomeColumn' –

+0

Ty (i OP) używasz' A' jako aliasu tabeli i jako aliasu kolumny (w różnych miejscach). –

+0

@ypercube, naprawiono teraz. – Johan

2

można przepisać zapytanie jak to

SELECT Complex.A, (Another Sub Query WHERE ID = Complex.A) 
FROM TABLE 
CROSS JOIN ((Complex SubQuery) AS A) Complex 
0

Innym rozwiązaniem, które można wykorzystać:

SELECT (Complex SubQuery) AS A, (Another Sub Query WHERE ID = A) 
FROM 
TABLE MAIN 
OUTER APPLY (SELECT (Complex SubQuery) AS A)