關聯兩表的update

 

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)

發佈了25 篇原創文章 · 獲贊 5 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章