日期:2014-05-17  浏览次数:20734 次

如何写sql
A表和B表结构相同, col1,col2,col3,col4;(无主键)
  现在希望比较两个表的数据,如果A表有的数据,B表没有,则把该条记录插入到B表;如果B表有的数据,A表没有,则希望更新B表该条数据的col4字段;
  能够用一条SQl完成该任务吗?


------解决方案--------------------
insert into B 
where exist
(
select aa.* from A aa
where not exists
(
select 1 from B bb where aa.col1=bb.col1 and aa.col2=bb.col2 and aa.col3=bb.col3 and aa.col4=bb.col4
)
)
------解决方案--------------------
怎么也要两条SQL吧,一条INSERT,一条UPDATE 
INSERT INTO B 
SELECT * FROM A WHERE NOT EXISTS (SELECT 1 FROM B WHERE A.主键 = B.主键);


UPDATE B SET COL4 = .. WHERE B.主键 = 
SELECT B.主键 FROM B WHERE NOT EXISTS (SELECT 1 FROM A WHERE A.主键 = B.主键);

------解决方案--------------------
既然没有主键,那么哪些字段可以确定记录唯一呢,col1,col2,col3全部还是部分呢,如果都确认不了那么A会出现重复记录,那样的话无论如何都不能实现的
------解决方案--------------------
SQL 語句不可以,用PL/SQL;
以下代碼請參考下吧
MERGER INTO B
USING A 
ON(A.COL1 = B.COL1)
WHEN MATCHED THEN 
UPDATE 
SET B.COL2 =A.COL2,B.COL3=A.COL3,B.COL4=A.COL4
WHEN NOT MATCHED THEN
INSERT 
VALUES(A.COL1.A.COL2,A.COL3,A.COL4)