其實在Mysql中,多表聯合update不是什么難事。
語法:
1
|
UPDATE
table_references
SET
col_name1=expr1 [, col_name2=expr2 ...] [
WHERE
where_definition]
|
示例:
1
|
UPDATE
table1, table2
SET
table1.value=table2.value, a.type=b.type
WHERE
table1.sid=table2.sid;
|
同樣的,在SqlServer中也可以很簡單的用聯合來實現:
1
|
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了。
1
|
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尋求幫助了,下面是一個例子:
1
|
UPDATE
table1
SET
col1 = 1
WHERE
table1.col2 = (
SELECT
col2
FROM
table2
WHERE
table2.col2 = table1.col2
AND
table2.col3 = 5);
|