MariaDB 子查询使用整行

MariaDB subquery use whole row

通常子查询比较单个或多个字段,删除语句通常通过 ID 删除值。不幸的是,我没有 ID 字段,我必须对不同类型的表使用通用方法。 这就是为什么我使用 limit 和 offset 作为解析行来处理子查询。

我知道这种方法有风险,但是有没有办法通过子查询和比较整行来删除行?

DELETE FROM table WHERE * = ( SELECT * FROM table LIMIT 1 OFFSET 6 )

我正在使用最新版本的 MariaDB

这听起来像是一个非常奇怪的需求,但我该判断谁呢? :)

我会简单地依赖主键:

DELETE FROM table WHERE id_table = (SELECT id_table FROM table LIMIT 1 OFFSET 6)

更新:哦,所以你没有主键?您可以通过这种方式连接整行(假设它有五个列,分别命名为 a、b、c、d、e):

DELETE t
FROM table t
INNER JOIN (
    SELECT a, b, c, d, e
    FROM table
    ORDER BY a, b, c, d, e
    LIMIT 1 OFFSET 6
) ROW6 USING (a, b, c, d, e);

唯一标识行的任何列子集(例如 a、c、d)都可以解决问题(并且可能是您作为主键所需要的)。

编辑:根据 Impaler 的出色建议添加了 ORDER BY 子句。这就是你快速举出例子的结果。

DELETE FROM t
    ORDER BY ...  -- fill in as needed
    LIMIT 6

(适用于任何版本)