工作中遇到MySQL对应系统表中存在脏数据的问题,重复的数据也属于脏数据的一种。
如何去除表中重复数据,正确SQL如下:
DELETE
FROM
pg_invoice_info_copy
WHERE
(
pg_invoice_code,
pg_invoice_number,
pg_invoice_amount,
pg_invoice_tax_amount
) IN (
SELECT
pg_invoice_code,
pg_invoice_number,
pg_invoice_amount,
pg_invoice_tax_amount
FROM
(
SELECT
pg_invoice_code,
pg_invoice_number,
pg_invoice_amount,
pg_invoice_tax_amount
FROM
pg_invoice_info_copy
GROUP BY
pg_invoice_code,
pg_invoice_number,
pg_invoice_amount,
pg_invoice_tax_amount
HAVING
count(*) > 1
) f
)
AND id NOT IN (
SELECT
id
FROM
(
SELECT
min(id) AS id
FROM
pg_invoice_info_copy
GROUP BY
pg_invoice_code,
pg_invoice_number,
pg_invoice_amount,
pg_invoice_tax_amount
HAVING
count(*) > 1
) t
)
执行结果如下:
这里标记一下自己踩过坑的地方: