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

18 浏览
0 Comments

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

这个问题已经有了答案:

可能是重复问题:

Mysql error 1093 - Can’t specify target table for update in FROM clause

在UPDATE查询的WHERE子句中放置SELECT查询时,会出现错误。

我的查询语句如下:

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
)

错误信息将显示如下:

\"You can\'t specify target table \'m\' for update in FROM clause\"

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

\"enter

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

提前谢谢您

admin 更改状态以发布 2023年5月21日
0
0 Comments

在MySQL中,您不能修改用于SELECT部分的同一张表。
此行为在以下文档中有所说明:http://dev.mysql.com/doc/refman/5.6/en/update.html

参考文献:
https://stackoverflow.com/a/45498/1225190

0
0 Comments

实际上,您可以通过将其包装在子查询中(因此创建结果的临时表)来更新它

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'

0