我正在尝试删除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不允许您在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
替换为该列的名称。