首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >验证两个不同表的两列是否完全匹配

验证两个不同表的两列是否完全匹配
EN

Stack Overflow用户
提问于 2010-04-09 03:25:24
回答 4查看 5.4K关注 0票数 7

在编写视图和在更深的视图中嵌套视图时,我有时会遗漏一些东西,最终导致行/数据丢失。如何检查来自两个不同表的列是否与数据完全匹配?

示例:

代码语言:javascript
运行
复制
select count(distinct table1.col1)
  from table1
 where table1.col1 not in (select distinct table2.col1 
                             from table2);

这将返回table1.col1中不在table2中的值的数量。但是,我不知道这是不是一个好的解决方案,因为它没有计算table1.col1中不存在的table2.col1值。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-04-09 03:31:58

使用:

代码语言:javascript
运行
复制
SELECT MAX(x.t1_missing_count) AS t1_missing_count, 
       MAX(x.t2_missing_count) AS t2_missing_count
  FROM (
SELECT COUNT(DISTINCT t1.col1) AS t1_missing_count,
       NULL AS t2_missing_count
  FROM TABLE_1 t1
 WHERE t1.col1 NOT IN (SELECT DISTINCT t2.col1 
                         FROM TABLE_2 t2)
UNION ALL
SELECT NULL,
       COUNT(DISTINCT t2.col1),           
  FROM TABLE_2 t2
 WHERE t2.col1 NOT IN (SELECT DISTINCT t1.col1 
                         FROM TABLE_1 t1)) x
票数 3
EN

Stack Overflow用户

发布于 2010-04-09 03:35:28

您可以使用两个EXCEPT查询(或联合它们)来检查:

代码语言:javascript
运行
复制
SELECT DISTINCT col1
FROM table1
EXCEPT
SELECT DISTINCT col1
FROM table2

这将显示存在于table1中但不存在于table2中的值。然后再次运行,并将表名翻转到相反位置。

票数 6
EN

Stack Overflow用户

发布于 2010-04-09 03:33:50

代码语言:javascript
运行
复制
select count(*) from (

select
table1.col1 from table1 left join table2 on table1.col1 = table2.col2
where table2.col1 is null

union

select table2.col1 from table2 left join table 1 on table2.col1 = table1.col1
where table1.col1 is null

)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2602774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档