我正在尝试使用联合获取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
)
答案 0 :(得分:21)
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子句中。声明临时表应该消除可能阻止查询执行的歧义。
答案 1 :(得分:15)
SELECT COUNT(*)
FROM
(
SELECT DISTINCT ColumnA From TableX WHERE x = y
UNION
SELECT DISTINCT ColumnA From TableY WHERE y = z
) t
使用“UNION”不会返回重复项。如果您使用“UNION ALL”,那么将从每个表中复制ColumnA值,然后返回。
答案 2 :(得分:1)
要在Union查询中获取不同的值,您可以尝试使用
"btn"
答案 3 :(得分:1)
SELECT DISTINCT Id, Name
FROM TableA
UNION ALL
SELECT DISTINCT Id, Name
FROM TableB
WHERE TableB.Id NOT IN (SELECT Id FROM TableA)