从 table 中删除重复项:语法 MariaDb 错误

Removing duplicates from a table: syntax MariaDb error

我正在使用此查询从 phoenix_tasks table:

中删除重复项
CREATE TEMPORARY TABLE temp
SELECT   `piva`
FROM     phoenix_tasks
GROUP BY `piva`
HAVING   COUNT(*) > 1;

DELETE FROM phoenix_tasks WHERE `piva` IN (SELECT `piva` FROM temp) AND taskStateId=1 ;


DROP TEMPORARY TABLE temp;

它在 phpMyAdmin 中正常工作

但是当通过 web 执行查询时,我收到此错误消息:

CREATE  TEMPORARY TABLE temp 
SELECT  piva
    FROM  phoenix_tasks
    GROUP BY  piva
    HAVING  COUNT (*) > 1;
DELETE
     FROM  phoenix_tasks
    WHERE  piva IN (
        SELECT  piva
            FROM  temp
                   )
      AND  taskStateId=1: 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 '
DELETE
     FROM  phoenix_tasks
    WHERE  piva IN (
        SELECT  piva
            FROM  temp
                   )
      AND  taskStat' at line 7

我在 https://mariadb.com/kb/en/useful-mariadb-queries/ 找到了这个:

删除重复项

CREATE TABLE t (id INT, f1 VARCHAR(2));

INSERT INTO t VALUES (1,'a'), (2,'a'), (3,'b'), (4,'a');

SELECT * FROM t t1, t t2 WHERE t1.f1=t2.f1 AND t1.id<>t2.id AND t1.id=(
  SELECT MAX(id) FROM t tab WHERE tab.f1=t1.f1
);
DELETE FROM t WHERE id IN (
  SELECT t2.id FROM t t1, t t2 WHERE t1.f1=t2.f1 AND t1.id<>t2.id AND t1.id=(
    SELECT MAX(id) FROM t tab WHERE tab.f1=t1.f1
  )
);

这似乎正是我正在尝试的查询 运行(除了我的临时查询中存在的和临时的不同构造 table)

我不知道为什么它有错误。

您的“网络执行工具”似乎不喜欢在一次调用中包含多个 SQL 语句 运行。

我会尝试 运行全部三个,但一次一个。

(已回答所述问题 -- 运行 单独陈述。我正在解决导致问题的 任务 。)

另一种删除重复数据的方法 table:

CREATE TABLE pt_new LIKE phoenix_tasks;
ALTER TABLE pt_new
    ADD UNIQUE(piva);  -- specify the combination of columns that determine uniqueness
INSERT IGNORE INTO pt_new
    SELECT * FROM piva;
RENAME TABLE phoenix_tasks TO pt_old,
             pt_new TO phoenix_tasks;
DROP TABLE pt_old;

但是,如前所述,运行 一次查询一个。

注意:在 DROP 之前,您有机会验证进程是否正常工作。

备注:

  • 如果两行在 other 列中具有不同的值,此方法将盲目地首先选择一行,然后根据 UNIQUE(piva) 抛出所有重复值。您可以通过在 SELECT.
  • 上添加 ORDER BY 来控制哪个 dup 获胜
  • 你现在有 PRIMARY KEY 吗?将其替换为 PRIMARY KEY (piva) 是否有意义?
  • 通过按此顺序执行这些步骤,其他连接永远不会看到 table 缺失或部分填充。 INSERT 很慢; RENAME 快速且原子化。