从union tsql中选择

Bla*_*ter 25 sql union sql-server-2005

是否可以从联盟的结果中进行选择?例如,我正在尝试做类似的事情:

SELECT A
FROM
(
    SELECT A, B FROM TableA
    UNION
    SELECT A, B FROM TableB
)
WHERE B > 'some value'
Run Code Online (Sandbox Code Playgroud)

我错过了什么或假设这是如何工作的?我正在使用MSSQL 2005,因此任何解决方案都需要符合我在那里可以做的事情.

him*_*056 45

你应该给你的表别名.试试这个:

SELECT A
FROM
(
    SELECT A, B FROM TableA
    UNION
    SELECT A, B FROM TableB
) AS tbl
WHERE B > 'some value'
Run Code Online (Sandbox Code Playgroud)


Nil*_*was 5

提供别名,否则您将收到

Msg 156, Level 15, State 1, Line 21
Incorrect syntax near the keyword 'WHERE'.
Run Code Online (Sandbox Code Playgroud)

试试这个(给出别名)

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
Run Code Online (Sandbox Code Playgroud)

结果

A

1
1
1
1
2
2
2
2
Run Code Online (Sandbox Code Playgroud)