MySQL:在有限范围内删除单个选定的行

问题描述 投票:0回答:2

我正在尝试删除LIMIT范围内的一行。它是否正确?如果没有,如何正确表达以下查询?

DELETE (
    SELECT * FROM `table_name`
    WHERE column_1 = 101
    ORDER BY column_2 ASC
    LIMIT 0, 1
    )

编辑:假设我有以下查询:

SELECT * FROM `table_name` WHERE column_1 = 101 ORDER BY column_2 ASC

并且此查询使我得到3行:

column_1   column_2   value
101        1          x
101        2          y
101        3          z

所以LIMIT n, 1从n处得到1单行。因此,LIMIT 0, 1使我排在第一行。 LIMIT 1, 1让我进入第二行。 LIMIT 2, 1让我进入第三行。

因此,假设我只想SELECT第三行:

SELECT * FROM `table_name` WHERE column_1 = 101 ORDER BY column_2 ASC LIMIT 2, 1

这很好用。但是以下方法不起作用:

DELETE FROM `table_name` WHERE column_1 = 101 ORDER BY column_2 ASC LIMIT 2, 1

我收到以下错误:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ' 1' at line 1
mysql sql sql-delete
2个回答
1
投票

只需执行以下操作:

Delete FROM `table_name`
    WHERE column_1 = 101
    ORDER BY column_2 ASC 
LIMIT 1

0
投票

MySQL不允许您在LIMIT offset, row_count查询中仅使用DELETE使用LIMIT row_count语法。

因此,您需要与子查询一起选择所需的行。

DELETE t1
FROM table_name AS t1
JOIN (
    SELECT id
    FROM table_name
    WHERE column_1 = 101
    ORDER BY column_2 ASC
    LIMIT 2, 1
) AS t2 ON t1.id = t2.id

表需要有一个主键列,将上面查询中的id替换为该列的名称。

© www.soinside.com 2019 - 2024. All rights reserved.