sql >> Database >  >> RDS >> Mysql

Selecteer meerdere veldduplicaten uit MySQL Database

Een zeer hacky oplossing is om de thread_id gesorteerd op view_count in een GROUP_CONCAT . Vervolgens kunnen we tekenreeksbewerkingen gebruiken om de thread_id . te krijgen met minimum view_count .

In je SELECT clausule, in plaats van t.thread_id , kunt u het volgende proberen:

SUBSTRING_INDEX(GROUP_CONCAT(DISTINCT t.thread_id 
                             ORDER BY t.view_count ASC 
                             SEPARATOR ','), 
                ',', 
                1) AS thread_id_with_minimum_views

Nu, gebaseerd op de SELECT query om dubbele records met minimale weergave te identificeren, DELETE verzoek om dergelijke records te verwijderen uit de xf_thread tabel ziet er als volgt uit:

DELETE t_delete FROM xf_thread AS t_delete 
INNER JOIN (SELECT CAST(SUBSTRING_INDEX(GROUP_CONCAT(DISTINCT t.thread_id ORDER BY t.view_count ASC SEPARATOR ','), ',', 1) AS UNSIGNED) AS tid_min_view 
            FROM (SELECT * FROM xf_thread) t 
            INNER JOIN xf_post p ON p.thread_id = t.thread_id 
            WHERE t.first_post_id = p.post_id 
              AND t.user_id = 0 
              AND t.reply_count < 2 
            GROUP BY t.title, t.username, p.message 
            HAVING Count(t.title) > 1 
               AND Count(t.username) > 1 
               AND Count(p.message) > 1 
            ORDER BY t.thread_id) AS t_dup 
  ON t_delete.thread_id = t_dup.tid_min_view 



  1. Interne SQL Server:Plan Caching Pt. I – Plannen hergebruiken

  2. opencart - Hoe kan ik handmatig een module in een sjabloonbestand weergeven?

  3. WinDeath op notifyDataSetChanged()

  4. Wijzig het scheidingsteken in een komma in SQLite-queryresultaten