2014-11-17 2 views
0

Я пытаюсь отфильтровать дубликаты цвета колонок , но только для каждой группы parent_id, а не весь цвета самого столбца.фильтр дублирующих на основе группы в SQL

Например, у меня есть следующая таблица:

parent_id | child_id | color | 
5   | 1  | blue  | 
5   | 2  | blue  | 
5   | 3  | green | 
5   | 4  | green | 
5   | 5  | yellow | 
5   | 6  | orange | 
6   | 7  | blue  | 
6   | 8  | blue  | 
6   | 9  | magenta | 
6   | 10  | green | 
6   | 11  | magenta | 
6   | 12  | orange | 

В результате я ищу это:

parent_id | child_id | color | 
5   | 1  | blue  | 
5   | 3  | green | 
5   | 5  | yellow | 
5   | 6  | orange | 
6   | 7  | blue  | 
6   | 9  | magenta | 
6   | 10  | green | 
6   | 12  | orange | 

Обратите внимание, как есть только один синий для parent_id = 5, и один синий для parent_id = 6. То же самое относится к остальным цветам.

Любая помощь по этому поводу очень ценится.

+0

Вы хотите, чтобы отфильтровать дубликаты или удалить их? –

+0

Отфильтруйте их в результирующем наборе. – Axel

ответ

2
select parent_id, min(child_id), color 
from your_tab 
group by parent_id, color; 
0

Если вы хотите удалить их:

delete t 
    from table t left join 
     (select parent_id, color, min(child_id) as minci 
      from table t 
      group by parent_id, color 
     ) pc 
     on t.parent_id = pc.parent_id and t.color = pc.color and t.child_id = pc.minci 
    where t.parent_id is null; 
Смежные вопросы