1> UPDATE
2> test_to
3> SET
4> test_to.val = test_from.val
5> FROM
6> test_to JOIN test_from
7> ON (test_to.id =test_from.id);
8> go
來進行兩個表的複製更新,不額外更新不匹配的數據。
但是這個SQL語句, 在 SQL Server 上面可以運行, 在 Oracle 、 Mysql 上面,好像是不行的。
今天在百度知道上面,就遇到個類似的情況
CREATE TABLE t1 ( id int, name varchar(10), age INT, address varchar(10));
CREATE TABLE t2 ( id int, name varchar(10), age INT, address varchar(10));
INSERT INTO t1 VALUES( 1, '小張', 0, '北京');
INSERT INTO t1 VALUES( 2, '小麗', 0, '上海');
INSERT INTO t1 VALUES( 3, '小花', 0, '雲南');
INSERT INTO t1 VALUES( 4, '小剛', 0, '四川');
INSERT INTO t1 VALUES( 5, '小陳', 0, '重慶');
INSERT INTO t2 VALUES(1, '小白', 15, '北京');
INSERT INTO t2 VALUES(2, '大俠', 48, '上海');
INSERT INTO t2 VALUES(3, '小花', 28, '雲南');
INSERT INTO t2 VALUES(4, '小剛', 28, '四川');
INSERT INTO t2 VALUES(5, '小陳', 24, '重慶');
INSERT INTO t2 VALUES(6, '小麗', 24, '天津');
說有2張表, t1 t2 , 要把 t2 的 age 字段的數據, 填寫到 t1 的 age 字段。
解決辦法是, 創建一個視圖,關聯這2個表。
CREATE VIEW temp_view AS
SELECT
t1.name AS t1Name,
t1.age AS t1Age,
t2.name AS t2Name,
t2.age AS t2Age
FROM
t1, t2
WHERE
t1.name = t2.name
然後直接更新視圖。
UPDATE temp_view SET t1Age = t2Age;
mysql> select * from t1;
+------+------+------+---------+
| id | name | age | address |
+------+------+------+---------+
| 1 | 小張 | 0 | 北京 |
| 2 | 小麗 | 24 | 上海 |
| 3 | 小花 | 28 | 雲南 |
| 4 | 小剛 | 28 | 四川 |
| 5 | 小陳 | 24 | 重慶 |
+------+------+------+---------+
5 rows in set (0.00 sec)