我编写了一个以表名作为参数的存储过程,用于检查该表中是否存在重复行。当然,这些语句是动态构建的:
INSERT INTO tmpTable
SELECT col1, col2,... FROM table GROUP BY col1, col2, ... HAVING COUNT(*) > 1;
DELETE FROM tablename FROM tablenname
INNER JOIN tmpTable ON ISNULL(tablename.col1, 0) = ISNULL(tmpTable.col1, 0)
AND ISNULL(tablename.col2, 0) = ISNULL(tmpTable.col2, 0)
AND ...;
INSERT INTO tablename SELECT * FROM tmpTable;
到目前为止应该可以工作,但问题是,当表有 blob 列时它会失败,比如文本。那些是无法比拟的JOIN
。我也试过
DELETE FROM tablename GROUP BY col1, col2, ... HAVING COUNT(*) > 1;
但在没有自连接的情况下直接GROUP BY
在语句中不支持。DELETE
此外,无法查询information_schema该表的主键,因为这些表都没有主键。
有任何想法吗?谢谢。