web-dev-qa-db-fra.com

Choisissez parmi union sql

Est-il possible de choisir parmi le résultat d'une union? Par exemple, j'essaie de faire quelque chose comme:

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

Suis-je en train de manquer quelque chose ou de faire une hypothèse sur la façon dont cela fonctionne? J'utilise MSSQL 2005, donc toute solution devra être conforme à ce que je peux y faire.

25
BlargleMonster

Vous devez donner alias à votre table. Essayez donc ceci:

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

Donnez un nom d'alias sans lequel vous recevrez

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

Essayez ceci (Donnez un nom d'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

Résultat

A

1
1
1
1
2
2
2
2
3
Niladri Biswas