web-dev-qa-db-ja.com

2つのユニオンSQLサーバーテーブル間で個別の値を取得する

ユニオンを使用して、2つのテーブルのすべての異なる値を取得しようとしています。

アイデアは、columnA列のすべての一意の値のカウントを繰り返しなしで取得して、一意のcolumnAを含むすべての列の合計を取得できるようにすることです。

これは私が試したものです(sql server express 2008)

select 
    count(Distinct ColumnA) 
from 
( 
    select Distinct ColumnA as ColumnA from tableX where x = y
    union
    select Distinct ColumnA as ColumnA from tableY where y=z
)
13
rockit
SELECT COUNT(distinct tmp.ColumnA) FROM ( (SELECT ColumnA FROM TableX WHERE x=y) 
UNION (SELECT ColumnA FROM TableY WHERE y=z) ) as tmp

TableXとTableYの特別な区別は必要ありません。それらはtmp.ColumnA句で削除されます。一時テーブルを宣言すると、クエリの実行を妨げる可能性のあるあいまいさが解消されます。

21
Jim Dagg
SELECT COUNT(*)
FROM
(
SELECT DISTINCT ColumnA From TableX WHERE x = y
UNION
SELECT DISTINCT ColumnA From TableY WHERE y = z
) t

「UNION」を使用しても、重複は返されません。 「UNIONALL」を使用した場合は、各テーブルから重複したColumnA値が返されます。

16
AdaTheDev

ユニオンクエリで個別の値を取得するには、これを試すことができます

Select distinct AUnion.Name,AUnion.Company from (SELECT Name,Company from table1 UNION SELECT Name,Company from table2)AUnion
2
Prateek Gupta
SELECT DISTINCT Id, Name
FROM   TableA
UNION ALL
SELECT DISTINCT Id, Name
FROM   TableB
WHERE  TableB.Id NOT IN (SELECT Id FROM TableA)
1