32

ユニオンの結果から選択することはできますか? たとえば、私は次のようなことをしようとしています:

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

これがどのように機能するかについて、私は何かを見逃していますか、それとも仮定していますか? 私は MSSQL 2005 を使用しているため、どのソリューションも、そこでできることに準拠する必要があります。

4

2 に答える 2

57

テーブルにエイリアスを与える必要があります。だからこれを試してください:

SELECT A
FROM
(
    SELECT A, B FROM TableA
    UNION
    SELECT A, B FROM TableB
) AS tbl
WHERE B > 'some value'
于 2012-09-13T04:14:42.767 に答える
4

エイリアス名を付けてください。

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
于 2012-09-13T04:16:21.920 に答える