相关疑难解决方法(0)

如何选择和/或删除表中每组重复项的所有行?

假设我有一个包含四列的MySQL表:

ID DRIVER_ID CAR_ID NOTES(大多数行为NULL)

我有一堆重复的行,其中DRIVER_ID和CAR_ID是相同的.对于每对DRIVER_ID和CAR_ID,我想要一行.如果集合中的一行具有非NULL NOTES,我想要那个,但是否则无关紧要.

所以,如果我有:

ID  |  DRIVER_ID  |  CAR_ID  |  NOTES
1      1             1          NULL
2      1             1          NULL
3      1             2          NULL
4      1             2          NULL
5      2             3          NULL
6      2             3          NULL
7      2             3          NULL
8      2             3          hi
9      3             5          NULL
Run Code Online (Sandbox Code Playgroud)

我想保留以下ID:9,8,然后是[3,4]和[1,2]各一个.

这是一张巨大的桌子,而且我尝试过的笨重的方法非常缓慢,我确信自己一切都错了.我怎样才能有效地a)选择要删除的ID列表?b)在同一个查询中删除它们?

(是的,我知道复合键的处理.这不是问题.)

编辑:对不起,忘了指定这是MySQL.

到目前为止我尝试过的一些东西:

select ID, COUNT(DRIVER_ID) rowcount from CARS_DRIVERS group by CAR_ID,DRIVER_ID HAVING rowcount > 1;
Run Code Online (Sandbox Code Playgroud)

我会给每个组一个ID.但是,如果有一行,它不一定会留下带有NOTES的行.每个重复组也只能得到一个ID.在某些情况下,有20多个重复组合,所以我需要反复迭代,将每个组缩小到一行.

select distinct t1.ID from CARS_DRIVERS t1 where exists (select * …
Run Code Online (Sandbox Code Playgroud)

mysql duplicates

7
推荐指数
1
解决办法
3568
查看次数

标签 统计

duplicates ×1

mysql ×1