假设我有一个包含四列的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)