4

t1と呼ばれるテーブルPRIMARY KEYがありますITEM_ID。表は次のとおりです。

ITEM_ID    VALUE1
2          2500
3          3500
5          5500

私もいくつかのテーブルがt2あり、t3それは次のようなものです。

ITEM_ID    VALUE2
2          250
3          350
4          450
5          550

ITEM_ID    VALUE3
2          25
3          35
4          45
5          55
6          65

これを取得したい(で見つかった行のみを保持して参加しますt1

ITEM_ID    VALUE1    VALUE2    VALUE3
2          2500      250       25
3          3500      350       35
5          5500      550       55

JOINCREATE新しいテーブルを使用してこれを行う方法を知っています。しかし、、、および列だけでそれを行うことは可能ALTERですADDUPDATE

4

2 に答える 2

10
ALTER TABLE t1 ADD VALUE2 INT, ADD VALUE3 INT;

UPDATE t1 a
JOIN   t2 b ON a.ITEM_ID = b.ITEM_ID
JOIN   t3 c ON a.ITEM_ID = c.ITEM_ID
SET    a.VALUE2 = b.VALUE2,
       a.VALUE3 = c.VALUE3;
于 2012-07-23T21:46:36.303 に答える
2

やり過ぎかもしれないストアドプロシージャを使用するか、2つのクエリを実行することができます。最初にJOINを実行する場合は、次のようにします。

mysql> SELECT t1.ITEM_ID, t1.VALUE1, t2.VALUE2, t3.VALUE3 FROM t1 LEFT JOIN t2 ON t2.ITEM_ID = t1.ITEM_ID LEFT JOIN t3 ON t3.ITEM_ID = t1.ITEM_ID
    -> ;
+---------+--------+--------+--------+
| ITEM_ID | VALUE1 | VALUE2 | VALUE3 |
+---------+--------+--------+--------+
|       2 | 2500   | 250    | 25     |
|       3 | 3500   | 350    | 35     |
|       5 | 5500   | 550    | 55     |
+---------+--------+--------+--------+
3 rows in set (0.00 sec)

mysql> 

次に、これらの値を使用して新しいテーブルを作成する場合は、次のように実行できます。

CREATE TABLE my_temp_table (SELECT t1.ITEM_ID, t1.VALUE1, t2.VALUE2, t3.VALUE3 FROM t1 LEFT JOIN t2 ON t2.ITEM_ID = t1.ITEM_ID LEFT JOIN t3 ON t3.ITEM_ID = t1.ITEM_ID);

データの更新を実行する場合は、元の結合を使用しますが、代わりにUPDATEに変換します。

UPDATE t1 LEFT JOIN t2 ON t2.ITEM_ID = t1.ITEM_ID LEFT JOIN t3 ON t3.ITEM_ID = t1.ITEM_ID SET t1.VALUE1 = 'someValue' WHERE t1.ITEM_ID = 'someId';

テストのビルドアップは次のとおりです。

mysql> CREATE TABLE t1 (ITEM_ID INT NOT NULL AUTO_INCREMENT, VALUE1 VARCHAR(24) NOT NULL, PRIMARY KEY (ITEM_ID));
Query OK, 0 rows affected (0.01 sec)

mysql> INSERT INTO t1 VALUES (2, 2500), (3, 3500), (5, 5500);
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> CREATE TABLE t2 (ITEM_ID INT NOT NULL AUTO_INCREMENT, VALUE2 VARCHAR(24) NOT NULL, PRIMARY KEY (ITEM_ID));
Query OK, 0 rows affected (0.00 sec)

mysql> CREATE TABLE t3 (ITEM_ID INT NOT NULL AUTO_INCREMENT, VALUE3 VARCHAR(24) NOT NULL, PRIMARY KEY (ITEM_ID));
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO t2 VALUES (2, 250), (3, 350), (4, 450), (5, 550);
Query OK, 4 rows affected (0.00 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> INSERT INTO t3 VALUES (2, 25), (3, 35), (4, 45), (5, 55), (6, 65);
Query OK, 5 rows affected (0.00 sec)
Records: 5  Duplicates: 0  Warnings: 0
于 2012-07-23T21:47:34.397 に答える