4

私はこのように見える2つのテーブルを持っています

TABLE1: id value number

TABLE2: id name value rid

valueTABLE2 から TABLE2.rid=TABLE1.idの TABLE1 にコピーしたいと思います。私は次のことを試しました:

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

ただし、TABLE1 と TABLE2 を結合していないため、これを実行できません。結合しようとすると、構文エラーが発生します。どんな助けでも大歓迎です。

4

2 に答える 2

5

両方のテーブルにすでにデータがあり、一方の列の値を一方のテーブルからもう一方のテーブルにコピーする必要があるため、INSERTステートメントではなくJOIN句を含むUPDATEステートメントが必要です。

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
于 2012-05-03T20:14:44.107 に答える
2
UPDATE table2 t2 
INNER JOIN table1 t1
    ON t2.rid=t1.id
SET t2.value = t1.value;
于 2012-05-03T20:00:03.350 に答える