UPDATE 查询的 WHERE 子句中的 SELECT 查询 [重复]
Posted
技术标签:
【中文标题】UPDATE 查询的 WHERE 子句中的 SELECT 查询 [重复]【英文标题】:SELECT query in WHERE clause of UPDATE query [duplicate] 【发布时间】:2012-10-28 08:21:42 【问题描述】:可能重复:mysql error 1093 - Can’t specify target table for update in FROM clause
将 SELECT 查询放入 UPDATE 查询的 WHERE 子句时出现错误。
我的查询是这样的:
UPDATE `subschedulesseats` m
SET m.studentid='1'
WHERE m.`seatid`= (
SELECT h.`seatid`
FROM `subschedulesseats` h
WHERE h.`sessiontime`='02:30~04:00'
ORDER BY h.`seatid` ASC
LIMIT 2,1
)
AND 错误会显示如下:
"您不能在 FROM 子句中指定目标表 'm' 进行更新"
我附上了错误显示的快照。
请谁能帮我解决这个问题?
提前致谢
【问题讨论】:
请直接发布代码而不是(难以阅读的)屏幕截图。这也将有助于回答者复制和更正您所拥有的内容。 你的头像太可爱了:D 这里是....***.com/questions/45494/… 抱歉图片不好。我已经更新了我的问题 【参考方案1】:实际上,您可以通过将其包装在子查询中来更新它(从而为结果创建临时表)
UPDATE `subschedulesseats` m
SET m.studentid='1'
WHERE m.`seatid`=
(
SELECT seatID
FROM
(
SELECT h.`seatid`
FROM `subschedulesseats` h
WHERE h.`sessiontime`='02:30~04:00'
ORDER BY h.`seatid` ASC
LIMIT 2,1
) s
)
或使用JOIN
UPDATE `subschedulesseats` m
INNER JOIN
(
SELECT seatID
FROM
(
SELECT h.`seatid`
FROM `subschedulesseats` h
WHERE h.`sessiontime`='02:30~04:00'
ORDER BY h.`seatid` ASC
LIMIT 2,1
) s
) t ON m.seatID = t.seatID
SET m.studentid = '1'
【讨论】:
Yupyyyyyy....谢谢亲爱的它可以根据我的需要完美运行...谢谢兄弟.... 使用 JOIN - 为我工作【参考方案2】:在 MySQL 中,您不能修改在 SELECT 部分中使用的同一个表。 此行为记录在:http://dev.mysql.com/doc/refman/5.6/en/update.html
参考
https://***.com/a/45498/1225190
【讨论】:
你的意思是说我们不能使用选择查询更新同一张表?没有办法使用单个查询来实现这一点 请参考这个答案老兄...***.com/a/45498/1225190。这是一个重复的问题以上是关于UPDATE 查询的 WHERE 子句中的 SELECT 查询 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
UPDATE 查询更改了没有 WHERE 子句但有 AND 子句的行 - 为啥?
子选择查询是不是基于它之外的 WHERE 子句进行了优化? [关闭]
sql中的update操作时 如果没有用到where子句会怎么样?