您可以使用可能矯枉過正的存儲過程,也可以執行兩個查詢。如果要執行第一個你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
你是說修改,添加和更新列是什麼意思?例如,最終的結果將在t1? – 2012-07-23 21:44:05
是的,我的意思是更新表格t1,而不必進行JOIN並創建一個新表格。 – Youcha 2012-07-23 21:45:17
你是否保證在兩個子表中不會有重複的'ITEM_ID'?如果有的話會發生什麼? – 2012-07-23 21:49:53