系统抛出错误“您无法在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
答案 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