我在SQL Server数据库中有两个表。这些表具有相同的列,我们可以说它是一个副本 - 我使用一个用于存档数据,另一个用于当前数据使用。
存档表没有主键,因为有时可能会重复,有时可以在当前表中找到主键,在存档表中找到副本。
我想要一个SELECT
语句来计算两个表中的列数而不计算主键的重复,因为第一个表中的主键可能在第二个表中找到两次或更多次。
做一些像:
SELECT COUNT(B.*) NO_ROWS
FROM
(SELECT <ALL COLUMNS IN BOTH TABLES EXCEPT THE ID>
FROM
(SELECT <ALL COLUMNS IN BOTH TABLES EXCEPT THE ID>
FROM <CURRENT_TABLE>
UNION ALL
SELECT <ALL COLUMNS IN BOTH TABLES EXCEPT THE ID>
FROM <ARCHIVE_TABLE>
) A
GROUP <ALL COLUMNS IN BOTH TABLES EXCEPT THE ID>) B;
所有列上的grouping将消除重复。
您似乎想要计算两个表的并集中的不同主键:
select count(distinct pk)
from
(
select pk from table_current
union all
select pk from table_archive
) both_tables;
或者,您可以构建一个不同的联合,然后只计算其记录:
select count(*)
from
(
select pk from table_current
union
select pk from table_archive
) both_tables;