利用join來更新表

2021-10-10 14:47:25 字數 1570 閱讀 6204

我們發現update子句無法更新包含在from子句中的表,如這樣的兩個表user1和user2

+----+-----------+----------+

| id | user_name | over |

+----+-----------+----------+

| 1 | 孫悟空 | 鬥戰勝佛 |

| 2 | 沙僧 | 金身羅漢 |

| 3 | 唐僧 | 功德佛 |

| 4 | 豬八戒 | 淨壇使者 |

+----+-----------+----------+

+----+-----------+--------+

| id | user_name | over |

+----+-----------+--------+

| 1 | 孫悟空 | 成佛 |

| 2 | 牛魔王 | 被降伏 |

| 3 | 蛟魔王 | 被降伏 |

| 4 | 鵬魔王 | 被降伏 |

| 5 | 獅駝王 | 被降伏 |

+----+-----------+--------+

mysql> update user1 a set a.over="齊天大聖" where a.user_name in (select a.user_name from user1 a join user2 b on a.user_name=b.user_name);

error 1093 (hy000): you can't specify target table 'a' for update in from clause

我們發現,mysql丟擲乙個錯誤,意思是指,不能更新被包含在from子句中的表。那我們可以借助join子句來實現將表user1放在join子句中的目的,如下:

mysql> update user1 a join (select b.user_name from user1 a join user2 b on a.user_name=b.user_name) b on a.user_name=b.user_name set a.over="齊天大聖";

query ok, 1 row affected (0.00 sec)

rows matched: 1 changed: 1 warnings: 0

mysql> select * from user1;

+----+-----------+----------+

| id | user_name | over |

+----+-----------+----------+

| 1 | 孫悟空 | 齊天大聖 |

| 2 | 沙僧 | 金身羅漢 |

| 3 | 唐僧 | 功德佛 |

| 4 | 豬八戒 | 淨壇使者 |

+----+-----------+----------+

4 rows in set (0.00 sec)

利用VS 2012更新表

想要更新一下資料庫裡的一張表,但是往表裡插入資料,再應用到資料庫時會報錯 sql0670n 表的行長度超過了 8101 位元組這一限制。sqlstate 54010,原來該錶的表空間只有8k,而資料項的長度已經遠遠超過了8k的表空間,因為沒有許可權,所以找系統服務部的人搬到了另乙個32k的表空間。然...

利用HandlerInteceptor來做請求驗證

小疑問 為什麼是interceptor的名字是用handler開頭的而不是httprequest?其實這是spring自己的 servlet的api裡是沒有interceptor的,功能相似的是filter,但是spring需要更強的控制能力,可以說是定製能力,filter只有interceptor...

mysql利用join優化子查詢

有表user id,name 和code id,student code 如果要查詢code在user中的對應的全部內容 沒有就為null 方式1 子查詢 select a.id a,name select b.student code from code c where c.id u.id fro...