mysql - 如何在单个 mysql 命令中删除此选择查询的结果?

标签 mysql select duplicates freeradius

表名称 radacct radacctid 是 pk accountuniqueid 是订阅者在连接时生成的几乎唯一的字符串。

这是输出重复条目的 mysql 查询,我想在同一命令中删除结果以自动执行此过程。

select *
from radacct
group by acctuniqueid
HAVING
(radacct.acctuniqueid > 1)

最佳答案

我假设您的意思是 HAVING 子句中的 HAVING COUNT(acctuniqueid) > 1 。如果您确实想删除所有重复项(即不保留任何重复项):

DELETE FROM
    radacct
WHERE
    `acctuniqueid` IN (
        SELECT `acctuniqueid` FROM (
            SELECT `acctuniqueid`
            FROM radacct
            GROUP BY `acctuniqueid`
            HAVING COUNT(`acctuniqueid`) > 1
        ) x
    )
;

中间的SELECT对于MySQL在直接子选择中忽略相同的表引用是必要的。

建议删除前先进行全表备份。

关于mysql - 如何在单个 mysql 命令中删除此选择查询的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43816152/

相关文章:

php - 我对他的 php mysql 做错了什么

mysql - 如何根据同一张表中的另一行进行更新?

mysql - 从 select 语句 mysql 调用用户定义的存储过程

mysql - PHP MySQL INSERT ON DUPLICATE KEY UPDATE 不起作用

sql - 从仅具有一个不同列 SQL 的重复发生中选择一个重复项

java - Java 消除数组中的重复数字

php - Codeigniter:使用数据库存储多个用户的数据库名称

mysql - Symfony2 Doctrine 嵌套连接关系

php - MySQL SELECT 和 order 作为关联数组

mysql - SELECT by A列OR B列在数据库中的数据比较顺序是什么