SQL查询以在Mysql数据库的任何表中查找重复行

SQL查询以在Mysql数据库的任何表中查找重复行,mysql,sql,Mysql,Sql,我正在寻找一个独立于模式的查询。查询应该同样能够捕获数据库中任一表中的重复行。我有许多表没有主键。我发现了一个sql server的结果[我最有经验],但在mysql中寻找相同的结果使用动态sql使用信息\u模式中的列信息生成查询: SET @tablename = 'yourTable'; SET @sql = ( SELECT CONCAT('SELECT * FROM `', table_name, '`

我正在寻找一个独立于模式的查询。查询应该同样能够捕获数据库中任一表中的重复行。我有许多表没有主键。我发现了一个sql server的结果[我最有经验],但在mysql中寻找相同的结果

使用动态sql使用
信息\u模式中的列信息生成查询

SET @tablename = 'yourTable';
SET @sql = (
    SELECT CONCAT('SELECT * 
                   FROM `', table_name, '`
                   GROUP BY ', GROUP_CONCAT(CONCAT('`', column_name, '`')), '
                   HAVING COUNT(*) > 1')
    FROM information_schema.columns
    WHERE table_name = @tablename );
PREPARE stmt FROM @sql;
EXECUTE stmt;

@bansi不是独立于模式的。您需要使用
信息\u schema.columns
@Barmar来编写动态SQL,谢谢您指出。出现错误。未知的预处理语句处理程序(stmt)执行时,考虑在每个表上循环您的逻辑,如果它运行良好,在我尝试时,它对我来说运行良好。你跳过了
PREPARE
行了吗?如果我没有先执行
PREPARE
,而执行
EXECUTE
,我就得到了这个错误。我得到了错误查询:PREPARE stmt FROM@sql error code:1064你的sql语法有错误;检查与您的MySQL服务器版本对应的手册,以了解在第1行执行时间:0秒传输时间:0秒总时间:0秒-------------------------------------------查询:执行stmt错误代码:1243未知准备语句处理程序(stmt)给定执行时间:0秒传输时间:0秒总时间:0秒我对此进行了测试,结果正常。如果你选择@sql,你会看到什么