標籤:
其實在Mysql中,多表聯合update不是什麼難事。
文法:
UPDATE table_references SET col_name1=expr1 [, col_name2=expr2 ...] [WHERE where_definition]
樣本:
UPDATE table1, table2 SET table1.value=table2.value, a.type=b.type WHERE table1.sid=table2.sid;
同樣的,在SqlServer中也可以很簡單的用聯合來實現:
UPDATE t1 SET col1=t2.col1 FROM table1 t1 INNER JOIN table2 t2 ON t1.col2=t2.col2;
但是,很可惜,在Sqlite中卻不支援這樣的文法,那是不是Sqlite中就不支援多表聯合update呢?當然不是的,其實Sqlite中多表聯合update也可以實現,
首先,Sqlite裡面有一個新鮮玩意“INSERT OR REPLACE”,跟Mysql類似,這個結構能夠保證在存在的情況下替換,不存在的情況下更新,用這個機制就可以輕鬆實現Update…From了。
INSERT OR REPLACE INTO t1(key, Column1, Column2) SELECT t2.key, t2.Column1,t2.Column2 FROM t2, t1 WHERE t2.key = t1.key;
這種方法要避免插入操作,首先要確保是依照主鍵執行的更新,如果where條件不是主鍵可能就有點麻煩了。
要是不是主鍵的更新怎麼辦能?另外還有其他的辦法嗎?我們在這中情況下只能向典型的Update…where尋求協助了,下面是一個例子:
UPDATE table1 SET col1 = 1 WHERE table1.col2 = (SELECT col2 FROM table2 WHERE table2.col2 = table1.col2 AND table2.col3 = 5);
[轉]Sqlite資料多表聯合update