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

MySQL: Deleting single selected row in a limited range

我正在尝试删除 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

只需执行以下操作:

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

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

因此您需要使用子查询加入到 select 您想要的行。

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

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