【问题标题】:How do I copy data from one table to another with WHERE clause?如何使用 WHERE 子句将数据从一个表复制到另一个表?
【发布时间】:2012-05-03 19:57:34
【问题描述】:

我有两张这样的表

TABLE1: idvaluenumber

TABLE2: idnamevaluerid

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

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

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

【问题讨论】:

  • 你得到什么样的错误?

标签: mysql sql


【解决方案1】:

您需要一个带有 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;

数据之前运行更新

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

【讨论】:

    【解决方案2】:
    UPDATE table2 t2 
    INNER JOIN table1 t1
        ON t2.rid=t1.id
    SET t2.value = t1.value;
    

    【讨论】:

      猜你喜欢
      • 2018-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-12
      • 1970-01-01
      相关资源
      最近更新 更多