如何处理这样的MYSQL查询更新

时间:2011-09-12 21:18:39

标签: mysql

系统抛出错误“您无法在FROM子句中为更新指定目标表'筛选'”如何完成这样的更新?

UPDATE screening
SET maileddate = date('Y-m-d', strtotime($mailed_date[$screeningId]))
WHERE user_id IN (SELECT id FROM users
INNER JOIN screening ON
(users.id = screening.users_id
AND screening.id = {$screeningId}))
AND date BETWEEN 05-15/2011 AND 11-15-2011
LIMIT 2  

3 个答案:

答案 0 :(得分:1)

您收到该错误,因为您正在尝试更新screening表,同时从同一个表中获取ID(与users一起加入)。对此的解决方法是使用子查询,如下:

UPDATE screening
   SET maileddate = date('Y-m-d', strtotime($mailed_date[$screeningId]))
 WHERE user_id IN (  
                    select s.id
                      from (

                        SELECT users.id
                          FROM users
                         INNER JOIN screening ON 
                                        users.id = screening.users_id
                                AND screening.id = {$screeningId}
                    ) as s)
   AND date BETWEEN 05-15/2011 AND 11-15-2011
LIMIT 2   

我只更改了缩进并将子查询添加为小写。

答案 1 :(得分:0)

我认为在内部查询中为筛选提供别名可以解决问题。 e.g

UPDATE screening
SET maileddate = date('Y-m-d', strtotime($mailed_date[$screeningId]))
WHERE user_id IN (SELECT id FROM users
INNER JOIN screening s ON
(users.id = s.users_id
AND s.id = {$screeningId}))
AND date BETWEEN 05-15/2011 AND 11-15-2011
LIMIT 2  

答案 2 :(得分:0)

您可以在UPDATE语句的table_definition部分设置多个表:

UPDATE screening,users
SET screening.maileddate = date('Y-m-d', strtotime($mailed_date[$screeningId]))
WHERE
    users.id = screening.users_id
AND
    date BETWEEN 05-15/2011 AND 11-15-2011
LIMIT 2

看看:http://dev.mysql.com/doc/refman/5.0/en/update.html