有時要把select的結果直接寫到update中,可以使用 inner select 的方法
舉例如下:
下表table1有兩個欄位,其中col2是空的,要從table2取回資料填入,table2的col3和table1的col1是關聯欄位
table1
欄col1 | 欄col2 |
A | |
B | |
C |
table2
欄col3 | 欄col4 |
A | 10 |
B | 20 |
C | 30 |
C | 40 |
C | 50 |
UPDATE table1 SET col2= (SELECT col4 FROM table2 WHERE table1.col1=table2.col3 LIMIT 1)
特別注意上面table2的C有三個數值,所以得加上limit 1,這樣會取第一個值,結果是:
table1
欄col1 | 欄col2 |
A | 10 |
B | 20 |
C | 30 |
上例直接用select 的方式把資料填入,就不必再麻煩用程式去處理。但是有需要注意的是:
1. inner select 的結果必須只有一個,不能有多個(因此得加上limit 1);
超過一行會出現這樣的錯誤
#1242 - Subquery returns more than 1 row
2. 取出的資料如果取不到會是null,有時會有無法塞入col2(設not null的情況下)。
3. update 的操作要小心,因為有可能把資料寫壞了,而且沒有復原的功能。
4. #1406 - Data too long for column 'colX' at row yy =>你的欄位太小,字串填不進去。
相關文章
[MYSQL] 把SELECT的結果INSERT到表中@精讚
原文 2015-04-06 19:28:21