我有2个表TblA
和TblB
。 TblA
列A B C ...Z
和TblB
列也有A B C D...Z
列。我希望列中的某个行的TblA
和TblB
数据不同。假设column A
是primary key
,并且永远不会更改,即可以join
执行column A
。
答案 0 :(得分:3)
可悲的是,在将版本/默认/历史记录表与另一个表进行比较时,没有比逐列更好的方法来进行查询
select
case when a.B!=b.B then 'B' else null end,
case when a.C!=b.C then 'C' else null end,
....(repeat for each column)
from tbla a
left join tblb b
on a.A=b.A
请记住,如果列可以包含null,null=anything is null
(不是true或false),那么您可能需要将ifnull()中的每一列包装起来进行比较
答案 1 :(得分:0)
编辑:我这里没有处理空值。您可以使用数据库的函数来处理这些函数。
这是3列的示例查询。您可以将其扩展到其他列。
with s1 (A ,B ,C) as
(select 1,22,23 from dual union
select 2,45,47 from dual union
select 3,66, 68 from dual
),
t1 (A ,B ,C) as
(select 1,23,24 from dual union
select 2,45,47 from dual union
select 3,66, 69 from dual
),
chng as(
select s1.*, case when s1.B = t1.B then '' else 'B' end as B1 , case when s1.C = t1.C then '' else 'C' end as C1
from s1 ,t1
where s1.A = t1.A
)
,chkChange as(
select a, (B1||C1) as Changes from chng
)
select * from chkChange
where changes is not null