如何解决删除重复项的mysql语法错误
DELETE FROM dmf_product_match_unmatches as pmu1
WHERE ID not in
(
SELECT MAX(ID) as maxRecId
FROM dmf_product_match_unmatches as pmu2
GROUP BY hid
);
但这给了
QL Error [1064] [42000]: You have an error in your sql Syntax; check the manual that corresponds to your MysqL server version for the right Syntax to use near 'as pmu1
WHERE ID not in
(
SELECT MAX(ID) as maxRecId
FROM dmf_prod' at line 1
解决方法
页面顶部的语法参考中的 documentation on DELETE 没有明确说明这一点,但如果您为表定义别名,则必须使用如下语法:
DELETE pmu1 FROM dmf_product_match_unmatches as pmu1
...
原因是使用 as
关键字会使解析器认为您使用的是多表删除语法,即使您在外部查询中只引用了一个表。我链接到的文档中的语法参考表明,如果您使用 table_references 语法,则需要 DELETE tbl_name FROM ...
语法,如果您使用 as
关键字,则需要这种语法。 >
文档确实有一个注释:
如果为表声明别名,则在引用表时必须使用别名:
DELETE t1 FROM test AS t1,test2 WHERE ...
或者,您不需要在此查询中定义别名,因此您可以使用更简单的语法:
DELETE FROM dmf_product_match_unmatches
...
,
这是由于某些未知原因导致错误消息与错误不匹配的情况。我不明白为什么 - 在 CLI 中执行时,错误消息必须是
不能在 FROM 子句中指定目标表 'pmu1' 进行更新
错误的根源 - 您不能使用要更改的表作为 WHERE 中子查询的数据源。
您必须改用多表 DELETE 语法:
DELETE pmu1
FROM dmf_product_match_unmatches as pmu1
LEFT JOIN ( SELECT MAX(ID) as ID,hid
FROM dmf_product_match_unmatches as pmu2
GROUP BY hid) pmu3 USING (ID,hid)
WHERE pmu3.ID IS NULL;
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=202cddc698cda3f83e0172c7e4e28a7d
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。