2010-09-23 60 views
4

更新加入另一個表格的表格。更新加入另一個表的表格

UPDATE t1 SET t1.col1 =1 FROM table1 t1 JOIN table2 t2 
ON t1.ID=t2.ID 
WHERE t1.Name='Test' AND t2.Age=25; 

我得到這個錯誤,你的SQL語法有錯誤;檢查對應於您的MySQL服務器版本的手冊,以便在'FROM table1 t1 JOIN table2 t2'附近使用正確的語法...

任何想法?

謝謝。

回答

10

不應該有在UPDATE語句FROM條款,以及SET條款應遵循的全套表引用:

UPDATE table1 t1 
JOIN table2 t2 ON t1.ID = t2.ID 
SET  t1.col1 = 1 
WHERE t1.Name = 'Test' AND t2.Age = 25; 

測試用例:

CREATE TABLE table1 (id int, col1 int, name varchar(20)); 
CREATE TABLE table2 (id int, age int); 

INSERT INTO table1 VALUES (1, 0, 'Test'); 
INSERT INTO table1 VALUES (2, 0, 'Test'); 
INSERT INTO table1 VALUES (3, 0, 'No Test'); 

INSERT INTO table2 VALUES (1, 20); 
INSERT INTO table2 VALUES (2, 25); 
INSERT INTO table2 VALUES (3, 25); 

結果:

SELECT * FROM table1; 
+------+------+---------+ 
| id | col1 | name | 
+------+------+---------+ 
| 1 | 0 | Test | 
| 2 | 1 | Test | 
| 3 | 0 | No Test | 
+------+------+---------+ 
3 rows in set (0.00 sec) 
0
UPDATE table1 SET col1 = 1 
from table1 t1 
JOIN table2 t2 ON t1.ID = t2.ID 
WHERE t1.Name = 'Test' AND t2.Age = 25; 
0

我在更新連接時遇到問題。在table1中我保存了用戶名而不是用戶名。 並且對於用戶名數據類型是varchar(10)。當名稱超過10時,名稱僅以10個字符保存。現在,當我嘗試使用連接查詢進行更新時,它不適用於在用戶表中沒有確切的用戶名的那些字段, 注意名稱bill gat在table1中,但用戶字段中的名稱是bill gates -缺少。

SELECT * FROM table1; 
+------+------+---------+ 
| id | col1 | created_by| 
+------+------+---------+ 
| 1 | 0 | steve jobs| 
| 2 | 1 | bill gat | 
| 3 | 0 | Jones | 
+------+------+---------+ 
3 rows in set (0.00 sec) 

===我解決了這個方式

UPDATE table1 AS tr 
JOIN users AS u ON u.name LIKE CONCAT('%', tr.created_by, '%') 
SET tr.created_by=u.id 
WHERE tr.created_by IS NOT NULL