从 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
快速且原子化。
我正在使用此查询从 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
. 上添加 - 你现在有
PRIMARY KEY
吗?将其替换为PRIMARY KEY (piva)
是否有意义? - 通过按此顺序执行这些步骤,其他连接永远不会看到 table 缺失或部分填充。
INSERT
很慢;RENAME
快速且原子化。
ORDER BY
来控制哪个 dup 获胜