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