UPDATE查询的WHERE子句中的SELECT查询

时间:2012-11-08 06:50:58

标签: mysql

  

可能重复:
  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'

我附上了错误显示的快照。

enter image description here

请有人帮我解决这个问题吗?

提前感谢

2 个答案:

答案 0 :(得分:6)

实际上你可以通过将它包装在子查询中来更新它(从而为结果创建临时表

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'

答案 1 :(得分:1)

在MySQL中,您无法修改在SELECT部分​​中使用的同一个表。 此行为记录在:http://dev.mysql.com/doc/refman/5.6/en/update.html

参考

https://stackoverflow.com/a/45498/1225190