ユニオンを使用して、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
)
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句で削除されます。一時テーブルを宣言すると、クエリの実行を妨げる可能性のあるあいまいさが解消されます。
SELECT COUNT(*)
FROM
(
SELECT DISTINCT ColumnA From TableX WHERE x = y
UNION
SELECT DISTINCT ColumnA From TableY WHERE y = z
) t
「UNION」を使用しても、重複は返されません。 「UNIONALL」を使用した場合は、各テーブルから重複したColumnA値が返されます。
ユニオンクエリで個別の値を取得するには、これを試すことができます
Select distinct AUnion.Name,AUnion.Company from (SELECT Name,Company from table1 UNION SELECT Name,Company from table2)AUnion
SELECT DISTINCT Id, Name
FROM TableA
UNION ALL
SELECT DISTINCT Id, Name
FROM TableB
WHERE TableB.Id NOT IN (SELECT Id FROM TableA)