oracle 连接A B两张表对比,对比2个字段,但是2个字段是一对多关系,怎么比?
oracle 连接A B两张表对比,对比2个字段-字段1 、字段2(A B表都有)。
但是字段1和字段2是1对多关系(字段1对应多个字段2).
想要输出:如果A、B两个表的字段1或者2不同,输出异常原因:字段1不同/字段2不同。
由于字段1和字段2是一对多,在case when 比的时候 会出现:
字段1和字段2:A 表: 比 B表
字段1:A 字段2:B 字段1:A 字段2:C
字段1:A 字段2: C 字段1:A 字段2:D
字段1:A 字段2: D 字段1:A 字段2:B
字段1:A 字段2: F
这样其实 A表和B表有3行记录一样,但是因为排序问题导致 结果对比都显示3行数据不一致(其实因该是A表比B表多一个AF,想要显示1行数据不一致,其他3行数据一致),这个咋解决。
回复
1个回答

test
2024-07-17
没用过 oracle
,用个 SQLite
吧,它的语法类似,功能 oracle
应该都支持
结果
result |
---|
共 5 行,2 行不一致 |
SQLite
代码
WITH
A(字段1, 字段2) AS (
VALUES
('A', 'B'),
('A', 'C'),
('A', 'D'),
('A', 'F')
),
B(字段1, 字段2) AS (
VALUES
('A', 'C'),
('A', 'D'),
('A', 'B'),
('A', 'E')
)
SELECT format('共 %d 行,%d 行不一致', COUNT(*), SUM(A.字段1 IS NULL OR B.字段1 IS NULL)) result
FROM A
FULL JOIN B ON (A.字段1, A.字段2) = (B.字段1, B.字段2);
回复

适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容