2015-10-12 90 views
0

我需要运行一个SQL UPDATE查询像下面SQL查询UPDATE语句的语法错误

UPDATE table_1 
SET field_1 = value_1 
WHERE field_2 IN (
     SELECT t1.field_2 
     FROM table_1 AS t1 
      ,table_2 AS t2 
     WHERE t2.field_3 = value_2 
      AND t1.field_2 = t2.field_2 
     ); 

但问题是它喜欢 -

您不能指定目标表howing错误't1'用于FROM子句中的更新

当我单独运行子查询并将其reslut放在主查询中时,我得到结果。谁能帮忙?

在此先感谢

回答

2

像错误说,MySQL不能更新,并在同一时间选择相同的表。但是,在中间的另一个子查询中,您仍然可以执行此操作。

UPDATE table_1 
SET field_1 = value_1 
where field_2 in 
(
    select * from 
    (
    SELECT t1.field_2 
    from table_1 as t1 
    join table_2 as t2 on t2.field_3 = value_2 
    and t1.field_2= t2.field_2 
) tmp 
) 
+0

您能否介绍一下附加子查询级别的要点? –

+0

@juergen d,非常感谢,它像一个魅力,但请解释什么是使用附加子查询级别? –

+0

它的用途是你用它创建一个临时表,并且不需要从你正在直接更新的表中进行选择。 –