如何写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)