2012-08-27 29 views
1

在尝试此查询:为什么我会得到这个错误在我的SQL查询

UPDATE l1_a 
SET l1_a.goals_for = l1_a.goals_for + l1_results.score1 
FROM l1_results, l1_a 
WHERE l1_results.team1 = l1_a.team_id; 

我得到的错误:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM l1_results, l1_a WHERE l1_results.team1 = l1_a.team_id' at line 3 

l1_a包含goals_for和TEAM_ID

l1_results包含score1(这是多少goal_for)和team1(这是team_id)

我的曲线有什么问题ERY?我有双重检查,所有的列和表是正确的名称查询

感谢

+3

你不能在更新了 “FROM” 子句。 – feathj

+1

@jonfen - 这取决于关系型数据库,虽然这看起来像MySQL,所以你的评论将是正确的 – Lamak

回答

4

documentation for UPDATE状态,这是语法多表UPDATE声明:

Multiple-table syntax: 

UPDATE [LOW_PRIORITY] [IGNORE] table_references 
    SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ... 
    [WHERE where_condition] 

试试这个:

UPDATE l1_results, l1_a 
SET l1_a.goals_for = l1_a.goals_for + l1_results.score1 
WHERE l1_results.team1 = l1_a.team_id; 
+0

UPDATE l1_results,l1_a SET l1_a.goals_for = l1_a.goals_for + l1_results.score1 WHERE l1_results.team1 = l1_a.team_id; 完美运作,谢谢! – Koala

1

你结合选择和更新的语法。更新语句中没有from

试试这个:

UPDATE l1_a 
SET l1_a.goals_for = l1_a.goals_for + 
    (select l1_results.score1 
    from l1_results 
    where l1_results.team1 = l1a.team_id) 

如果有在l1_results没有记录,你可能会清空您的数据。最好加一个IFNULL:

UPDATE l1_a 
SET l1_a.goals_for = l1_a.goals_for + IFNULL(
    (select l1_results.score1 
    from l1_results 
    where l1_results.team1 = l1a.team_id), 0) 
+0

感谢您的回复,有没有做这个查询没有FROM? – Koala

+0

我这么认为。我已经添加了一个声明,但目前我无法测试它。 – GolezTrol

+1

@GolezTrol不要这样做 - 只需使用多表更新语法即可。 – Ariel

0

变化

UPDATE l1_a 
SET l1_a.goals_for = l1_a.goals_for + l1_results.score1 
FROM l1_results, l1_a 
WHERE l1_results.team1 = l1_a.team_id; 

UPDATE l1_a 
SET l1_a.goals_for = l1_a.goals_for + l1_results.score1 
WHERE l1_results.team1 = l1_a.team_id; 

你不需要FROM l1_results,l1_a