【问题标题】:SELECT query in WHERE clause of UPDATE query [duplicate]UPDATE 查询的 WHERE 子句中的 SELECT 查询 [重复]
【发布时间】: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
  • 抱歉图片不好。我已经更新了我的问题

标签: mysql


【解决方案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://stackoverflow.com/a/45498/1225190

【讨论】:

  • 你的意思是说我们不能使用选择查询更新同一张表?没有办法使用单个查询来实现这一点
  • 请参考这个答案老兄...stackoverflow.com/a/45498/1225190。这是一个重复的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-12
  • 1970-01-01
  • 2021-11-16
  • 1970-01-01
  • 2018-11-17
  • 2017-12-10
  • 2016-10-23
相关资源
最近更新 更多