跨2个联合sql server表获取不同的值

roc*_*kit 13 sql union distinct distinct-values

我试图使用union来获取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
)
Run Code Online (Sandbox Code Playgroud)

Jim*_*agg 21

SELECT COUNT(distinct tmp.ColumnA) FROM ( (SELECT ColumnA FROM TableX WHERE x=y) 
UNION (SELECT ColumnA FROM TableY WHERE y=z) ) as tmp
Run Code Online (Sandbox Code Playgroud)

TableX和TableY的额外区别不是必需的; 它们将被删除在tmp.ColumnA子句中.声明临时表应该消除可能阻止查询执行的歧义.

  • COUNT中的DISTINCT(DISTINCT不是必需的,因为`UNION`删除了重复项 (11认同)

Ada*_*Dev 15

SELECT COUNT(*)
FROM
(
SELECT DISTINCT ColumnA From TableX WHERE x = y
UNION
SELECT DISTINCT ColumnA From TableY WHERE y = z
) t
Run Code Online (Sandbox Code Playgroud)

使用"UNION"不会返回重复项.如果您使用"UNION ALL",那么将返回每个表的重复ColumnA值.

  • 由于UNION会删除重复项,因此不需要DISTINCT.`UNION ALL`不**删除重复项 (3认同)