1、不能用触发器吗? 2、有些大型数据库可以支持“出版”,你的不可以吗? 3、视图肯定最好,为什么不用视图? 4、--删除多余 DELETE FROM TABLE2 WHERE pri-key NOT IN (SELECT pri-key FROM TABLE1) --更新不同 UPDATE TABLE2 SET pri-key = TABLE1.pri-key , data1 = TABLE1.data1 , data2 = TABLE2.data2 from TABLE2 JOIN TABLE1 ON TABLE2.pri-key = TABLE1.pri-key WHERE TABLE2.data1 <> TABLE1.data1 OR TABLE2.data2 <> TABLE1.data2 --插入没有的 INSERT INTO TABLE2(pri-key , data1 , data2) SELECT pri-key , data1 , data2 FROM TABLE1 WHERE pri-key NOT IN (SELECT pri-key FROM TABLE2) 5、以上代码还有其它变体,比如子查询变成联接,插入写为游标拼“values(...)”等等,但我还是推荐你重新设计一下这个数据库,出现这种程度的冗余数据有必要吗?
update table2 set (data1,data2)=(dselect data1,data2 from table1 where pri-key =table2.pri-key); 不行吗?
update table2 set (data1,data2)=(select data1,data2 from table1 where pri-key =table2.pri-key); 不行吗?
to ccat(阿猫) 第4点不敢苟同 数据量大的话 not in 的效率太低. to yfd 为什么要这样做,避免锁住?
你的table2是不是数据要求总是与table1相同?
2、有些大型数据库可以支持“出版”,你的不可以吗?
3、视图肯定最好,为什么不用视图?
4、--删除多余
DELETE FROM TABLE2 WHERE pri-key NOT IN (SELECT pri-key FROM TABLE1)
--更新不同
UPDATE TABLE2
SET pri-key = TABLE1.pri-key ,
data1 = TABLE1.data1 ,
data2 = TABLE2.data2
from TABLE2 JOIN TABLE1 ON TABLE2.pri-key = TABLE1.pri-key
WHERE TABLE2.data1 <> TABLE1.data1
OR TABLE2.data2 <> TABLE1.data2
--插入没有的
INSERT INTO TABLE2(pri-key , data1 , data2)
SELECT pri-key , data1 , data2
FROM TABLE1
WHERE pri-key NOT IN (SELECT pri-key FROM TABLE2)
5、以上代码还有其它变体,比如子查询变成联接,插入写为游标拼“values(...)”等等,但我还是推荐你重新设计一下这个数据库,出现这种程度的冗余数据有必要吗?
set (data1,data2)=(dselect data1,data2
from table1 where pri-key =table2.pri-key);
不行吗?
set (data1,data2)=(select data1,data2
from table1 where pri-key =table2.pri-key);
不行吗?
第4点不敢苟同 数据量大的话 not in 的效率太低.
to yfd
为什么要这样做,避免锁住?