如何使用WHERE子句将数据从一个表复制到另一个表?

时间:2012-05-03 19:57:34

标签: mysql sql

我有两个看起来像这样的表

TABLE1id value number

TABLE2id name value rid

我想将TABLE2中的value复制到其中TABLE2.rid = TABLE1.id的TABLE1中。我尝试过以下方法:

INSERT INTO TABLE1 (value) SELECT value FROM TABLE2 WHERE TABLE2.rid=TABLE1.id.

我不能这样做,因为我没有加入TABLE1和TABLE2 - 如果我尝试这样做,我会收到语法错误。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:6)

您需要一个带有JOIN子句而不是INSERT语句的UPDATE语句,因为您已经在这两个表中都有数据,并且您希望将其中一个列中的值从一个表复制到另一个表中。

Click here to view the demo in SQL Fiddle.

脚本

CREATE TABLE table1
(   id          INT NOT NULL 
    , value     INT NOT NULL
    , number    INT NOT NULL
);

CREATE TABLE table2
(       id      INT         NOT NULL
    ,   name    VARCHAR(30) NOT NULL
    ,   value   INT         NOT NULL
    ,   rid     INT         NOT NULL
);

INSERT INTO table1 (id, value, number) VALUES
  (1,  0, 111),
  (2,  0, 222),
  (3,  0, 333),
  (4, 10, 444);

INSERT INTO table2 (id, name, value, rid) VALUES
  (1, 'abc', 123, 1),
  (2, 'def', 345, 2),
  (3, 'efg', 456, 3),
  (4, 'ghi', 567, 4);

UPDATE      table1
INNER JOIN  table2
ON          table1.id       = table2.rid
SET         table1.value    = table2.value;

数据之前运行UPDATE

table1:
ID  VALUE NUMBER
--  ----- ------
1     0    111
2     0    222
3     0    333
4    10    444

table2:
ID  NAME  VALUE RID
--  ----  ----- ---
1   abc   123   1
2   def   345   2
3   efg   456   3
4   ghi   567   4

数据 运行UPDATE 后的数据

table1:
ID  VALUE NUMBER
--  ----- ------
1    123    111
2    345    222
3    456    333
4    567    444

table2:
ID  NAME  VALUE RID
--  ----  ----- ---
1   abc   123   1
2   def   345   2
3   efg   456   3
4   ghi   567   4

答案 1 :(得分:2)

UPDATE table2 t2 
INNER JOIN table1 t1
    ON t2.rid=t1.id
SET t2.value = t1.value;