39

Is it possible to select from the result of a union? For example I'm trying to do something like:

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

Am I missing anything or making an assumption about how this works? I'm using MSSQL 2005 so any solution will need to conform to what I can do there.

Himanshu
  • 31,810
  • 31
  • 111
  • 133
BlargleMonster
  • 1,602
  • 2
  • 18
  • 33

2 Answers2

64

You should give alias to your table. So try this:

SELECT A
FROM
(
    SELECT A, B FROM TableA
    UNION
    SELECT A, B FROM TableB
) AS tbl
WHERE B > 'some value'
Himanshu
  • 31,810
  • 31
  • 111
  • 133
5

Give Alias name without which you will receive

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

Try this (Give Alias Name)

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

Result

A

1
1
1
1
2
2
2
2
Niladri Biswas
  • 4,153
  • 2
  • 17
  • 24