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子句会怎么样?

如何在 SQL UPDATE 语句 WHERE 子句中读取脏值

mysql语句where条件中的是啥意思

9)子查询