这两个表结构一样cm_cust_info 、cm_cust 查找出不一样的数据的sql

如果两个表 cm_cust_infocm_cust 的结构相同,并且你想找出两者中数据不相同的记录,可以使用以下几种方法来比较这两个表的内容。

1. 使用 EXCEPTMINUS 关键字(仅适用于支持这些关键字的数据库,如 Oracle、PostgreSQL 等)

你可以使用 MINUS(Oracle)或 EXCEPT(PostgreSQL)来查找两个表中不相同的数据。

示例(Oracle 使用 MINUS):

SELECT * FROM cm_cust_info
 MINUS
 SELECT * FROM cm_cust 
UNION ALL 
SELECT * FROM cm_cust MINUS 
SELECT * FROM cm_cust_info;

这将查找两个表中不相同的记录。MINUS 运算符返回存在于第一个查询结果但不存在于第二个查询结果的行。上面的查询通过 UNION ALL 将两个表之间的差异合并起来。

2. 使用 LEFT JOINRIGHT JOIN

如果数据库不支持 MINUSEXCEPT,可以使用 JOIN 来查找表之间的差异。

示例(使用 LEFT JOINRIGHT JOIN):
 

sql

-- 查找 cm_cust_info 中存在但 cm_cust 中不存在的记录 
SELECT * FROM cm_cust_info a LEFT JOIN cm_cust b ON a.id = b.id 
-- 假设两张表都有 id 列作为主键 
WHERE b.id IS NULL UNION ALL 
-- 查找 cm_cust 中存在但 cm_cust_info 中不存在的记录 
SELECT * FROM cm_cust b LEFT JOIN cm_cust_info a ON b.id = a.id WHERE a.id IS NULL;

3. 使用 NOT EXISTS

你可以通过 NOT EXISTS 来查找不相同的记录。

示例(使用 NOT EXISTS):
 

sql

-- 查找 cm_cust_info 中存在但 cm_cust 中不存在的记录
 SELECT * FROM cm_cust_info a
 WHERE NOT EXISTS ( SELECT 1 FROM cm_cust b WHERE a.id = b.id 
-- 根据你要比较的列,可以是主键或其他唯一标识的列 ) 
UNION ALL 
-- 查找 cm_cust 中存在但 cm_cust_info 中不存在的记录 
SELECT * FROM cm_cust b
 WHERE NOT EXISTS ( SELECT 1 FROM cm_cust_info a WHERE a.id = b.id );

4. 查找行数据不同的记录

如果你不仅想比较存在性,还想比较相同 id 的行中有不同列的记录,可以按列进行比较。

示例:
 

sql

SELECT * FROM cm_cust_info a JOIN cm_cust b ON a.id = b.id 
-- 假设使用主键 id 进行匹配
 WHERE a.column1 != b.column1 OR a.column2 != b.column2
 OR a.column3 != b.column3;

在此查询中,列出所有要比较的列,WHERE 子句将查找相同 id 但列值不同的行。

总结

  • 如果你的数据库支持 MINUS(Oracle)或 EXCEPT(PostgreSQL),这是最简单的方法来比较两个表。
  • 如果你的数据库不支持这些运算符,可以使用 LEFT JOINNOT EXISTS 或者直接按列比较来查找不同的记录。

根据你的具体需求(比如是只比较存在性,还是还要比较列值不同的情况),选择最合适的查询方法。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值