SQL仅获取不匹配的列

标签 sql oracle testing etl

我想知道在进行容量测试时是否只能从表中获取不匹配的数据集,请看下面的示例:

如果下表是我的目标表,如果数据正确加载,我将执行测试,我会编写一条 SQL 来从源中选择列并对目标表执行减号,如果假设源有 sal of XXX as 2000 那么这是从源到目标的不匹配,是否可以仅获取 id 和 sal 列作为减号查询的输出。

需要明确的是,如果我有一个包含 100 列的表来测试,负查询将返回所有 100 列,即使 1 列中存在不匹配,因此我只想返回 1 列不匹配的列。

id  Name sal
--  ---- ----
1   XXX 1000
2   YYY 2000
3   ZZZ 4000
4   AAA 5000

最佳答案

基于以下假设

源表和目标表都有共同的主键

然后可以使用 case 语句来缩小导致不匹配的确切列的范围

http://sqlfiddle.com/#!2/a78eca/16

select 
ST.id,
case 
when ST.name!=TT.name then 'Issue in name' 
When ST.sal!=TT.sal then 'Issue in Sal'
Else 'OK' END As Check_Column
From source_table ST, Target_table TT
where ST.id=TT.id
and (ST.name!=TT.name OR ST.sal!=TT.sal)

上面的解释是,where 条件将仅过滤掉有问题的行,而 case 语句将告诉哪一行导致不匹配

关于SQL仅获取不匹配的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35004326/

相关文章:

php - PHP mysql 中的数据未更新

c# - 如果当前数据 GridView 中存在产品 ID,则将数量增加一 (+1)

unit-testing - npm 运行自定义测试 - sendHttpRequest 失败 non200Response

maven - Mule 中的部署后集成测试

SQL 查询 : list all items in one table that do not appear in another table

sql - MySQL 将当前数据库与备份 SQL 文件合并

mysql - 从子查询中检索多列

database - 检索包内存在的对象/记录的元数据 - Oracle 数据库

oracle - 在 Oracle Express 中创建触发器

java - 注释类型测试的超时参数