2012-09-13 57 views
18

是否可以从联合结果中进行选择?举例来说,我试图做类似的事情:从联盟中选择tsql

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

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

+0

是的,它是可能的。有什么问题吗? – hims056

+0

我收到错误'关键字'WHERE'附近的错误语法。'并且无法运行查询。 – BlargleMonster

+1

缺少别名name..check提供的答案 –

回答

35

你应该给别名您的餐桌。所以,试试这个:

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

给没有它,您将收到

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

试试这个(给别名)

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 

结果

一个别名

1 
1 
1 
1 
2 
2 
2 
2