web-dev-qa-db-ja.com

ユニオンSQLから選択

組合の結果から選択することは可能ですか?たとえば、私は次のようなことをしようとしています:

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

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

25
BlargleMonster

テーブルにaliasを指定する必要があります。だからこれを試してください:

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

あなたが受け取ることなくエイリアス名を与えます

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

結果

[〜#〜] a [〜#〜]

1
1
1
1
2
2
2
2
3
Niladri Biswas