2012-09-13 11 views
18

È possibile selezionare dal risultato di un sindacato? Per esempio sto cercando di fare qualcosa del tipo:Seleziona da unione tsql

SELECT A 
FROM 
(
    SELECT A, B FROM TableA 
    UNION 
    SELECT A, B FROM TableB 
) 
WHERE B > 'some value' 

Mi manca qualcosa o faccio una supposizione su come funziona? Sto usando MSSQL 2005 quindi qualsiasi soluzione dovrà essere conforme a ciò che posso fare lì.

+0

Sì, è possibile. C'è qualche problema? – hims056

+0

Ho ricevuto l'errore "Sintassi errata vicino alla parola chiave" WHERE "." e non sono in grado di eseguire la query. – BlargleMonster

+1

Nome alias mancante.Check le risposte fornite –

risposta

35

Si dovrebbe dare alias al proprio tavolo. Quindi provare questo:

SELECT A 
FROM 
(
    SELECT A, B FROM TableA 
    UNION 
    SELECT A, B FROM TableB 
) AS tbl 
WHERE B > 'some value' 
3

indicare il nome Alias, senza la quale si avrà

Msg 156, Level 15, State 1, Line 21 
Incorrect syntax near the keyword 'WHERE'. 

Prova questa (Fai Nome alias)

DECLARE @TableA Table(A int, B int) 
DECLARE @TableB Table(A int, B int) 

INSERT INTO @TableA VALUES(1,1) 
INSERT INTO @TableA VALUES(1,2) 
INSERT INTO @TableA VALUES(1,3) 
INSERT INTO @TableA VALUES(1,4) 

INSERT INTO @TableB VALUES(2,1) 
INSERT INTO @TableB VALUES(2,2) 
INSERT INTO @TableB VALUES(2,3) 
INSERT INTO @TableB VALUES(2,4) 

SELECT A 
FROM 
(
    SELECT A, B FROM @TableA 
    UNION 
    SELECT A, B FROM @TableB 
)X -- here X is table Alias 
WHERE B > 0 

Risultato

A

1 
1 
1 
1 
2 
2 
2 
2