sql - 比较两个表中的记录并突出显示差异

标签 sql oracle

我有两个具有完全相同列的表

表A

标识标志
1 年
2 年
3 N
4 N

表 B

标识标志
1 年
2
3 N
4

我想在 Oracle 中编写一个选择查询,它将显示表 A 中的所有行,其中 FLAG列与表 B 不同,但具有匹配的 ID 列

结果应该如下。

标识标志
2 年
4 N

最佳答案

“表 A 中的所有行......作为表 B 具有匹配 ID 的列”:

FROM a JOIN b USING (id)

“其中 FLAG 列不相同”:
WHERE a.flag != b.flag 
   OR (a.flag IS NULL AND b.flag IS NOT NULL)
   OR (b.flag IS NULL AND a.flag IS NOT NULL)

所以,查询将是
SELECT id, a.flag
  FROM a JOIN b USING (id)
WHERE a.flag != b.flag 
   OR (a.flag IS NULL AND b.flag IS NOT NULL)
   OR (b.flag IS NULL AND a.flag IS NOT NULL)
WHERE -condition 很难看,但对于捕获表 b 具有 NULL 的情况是必要的-value,但不是,或者相反......

关于sql - 比较两个表中的记录并突出显示差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13916969/

相关文章:

mysql - 我可以用纯 SQL 做到这一点吗?

mysql - 查找每个父 ID 的重复项

使用日期的 MySQL CASE 语句

sql - ORACLE - 过程中出现错误 PLS-00103

oracle - Oracle函数无法编译

c# - 将 SQL 函数添加到 .NET Core SaveChanges 方法

java - MySQL、Java 和时区

sql - 在有条件的表中查找重复项

oracle - 在 Oracle 的查询中不能两次引用 CTE 吗?

spring - JdbcTemplate - 使用 SQL MERGE 插入或更新 Oracle BLOB