oracle 兩表資料對比 1

2021-05-24 11:58:25 字數 4052 閱讀 9353

a,b兩表結構一樣,a表和b表比較,如果有資料不一樣,則把不一樣的資料儲存到c表。如:

a表資料

6,mixed,nuts,z

b表資料

6,mixed,nuts,c

要把兩條資料都儲存到c表,並且要標記出哪條資料是哪個表的,如:

source type user_id first_name last_name grade

a表   36

mixed      nuts     z

b表   36

mixed      nuts     c

source 欄位的意思是:資料**哪個表

type 欄位的意思是:

如果a表有的資料b表沒有,則type=1

。如果b表有的資料a表沒有,則type=2

。如果a表有的資料b表也有,只是有些欄位的值不一樣,則type=3

。按照下列資料,最後c表的結果應該是:

source type user_id first_name last_name grade

a表   36

mixed      nuts     z

b表   36

mixed      nuts     c

b表   211

jack       fancy    a

a,b表結構:

create table a(

user_id integer not

null

,first_name varchar(

20),

last_name varchar(

20),

grade varchar(

20),

constraint a_pkey primary key(user_id)

)c表結構:

create table c(

source varchar(

20) not

null

,type integer not

null

,user_id integer not

null

,first_name varchar(

20),

last_name varchar(

20),

grade varchar(20)

)insert into a(user_id,first_name,last_name,grade)values(1,

'some',

'dude',

'a')

insert into a(user_id,first_name,last_name,grade)values(2,

'other',

'guy',

'b')

insert into a(user_id,first_name,last_name,grade)values(3,

'you are',

'welcome',

'b')

insert into a(user_id,first_name,last_name,grade)values(4,

'what',

'other',

'a')

insert into a(user_id,first_name,last_name,grade)values(5,

'ineed',

'you',

'c')

insert into a(user_id,first_name,last_name,grade)values(6,

'mixed',

'nuts',

'z')

insert into a(user_id,first_name,last_name,grade)values(7,

'kirk',

'land',

'b')

insert into a(user_id,first_name,last_name,grade)values(8,

'bit',

'shooter,'a

')insert into b(user_id,first_name,last_name,grade)values(1,

'some',

'dude',

'a')

insert into b(user_id,first_name,last_name,grade)values(2,

'other',

'guy',

'b')

insert into b(user_id,first_name,last_name,grade)values(3,

'you are',

'welcome',

'b')

insert into b(user_id,first_name,last_name,grade)values(4,

'what',

'other',

'a')

insert into b(user_id,first_name,last_name,grade)values(5,

'ineed',

'you',

'c')

insert into b(user_id,first_name,last_name,grade)values(6,

'mixed',

'nuts',

'c')

insert into b(user_id,first_name,last_name,grade)values(7,

'kirk',

'land',

'b')

insert into b(user_id,first_name,last_name,grade)values(8,

'bit',

'shooter,'a

')insert into b(user_id,first_name,last_name,grade)values(11,

'jack',

'fancy',

'b')

insert

into

c select

*from

(with

t1 as

(select

*from

a minus

select

*from

b),

t2 as

(select

*from

b minus

select

*from

a)select'a

'source,

3type,t1.

*from

t1 where

exists

(select

1from

t2 where

t2.user_id

=t1.

user_id

)union

allselect'a

'source,

1type,t1.

*from

t1 where

notexists

(select

1from

t2 where

t2.user_id

=t1.

user_id

)union

allselect'a

'source,

3type,t2.

*from

t2 where

exists

(select

1from

t1 where

t2.user_id

=t1.

user_id

)union

allselect'a

'source,

2type,t2.

*from

t2 where

notexists

(select

1from

t1 where

t2.user_id

=t1.

user_id

));解決方法:

ORACLE資料庫對比表結構

有時候會有某種需求 需要對比兩個表的表結構是否一致,有時候甚至是整個資料庫所有表的表結構對比.表結構對比無非就是欄位名 字段型別 字段資料型別 以及欄位的順序的對比。如果需要對比表結構,可以通過下面簡單的指令碼實現 m.table name,m.column id,m.column name,m.d...

ORACLE資料庫對比表結構

有時候會有某種需求 需要對比兩個表的表結構是否一致,有時候甚至是整個資料庫所有表的表結構對比.表結構對比無非就是欄位名 字段型別 字段資料型別 以及欄位的順序的對比。如果需要對比表結構,可以通過下面簡單的指令碼實現 select m.owner,m.table name,m.column id,m....

對比兩個資料庫表結構

在專案做好後實施了以後,可能因為需求等原因需要公升級,這時候一般都是在測試系統改好後在更新到正式系統.儲存過程,檢視等可以直接通過全部刪除在建立進行更新,但是表因為正式系統裡已有資料所以無法通過該方式進行更新.只能更改表結構,而這時有可能因為更改的表結構比較多,而出現有的表忘了更新.該程式可以對比兩...