Поиск неправильных дубликатов данных в SQL - PullRequest
0 голосов
/ 01 мая 2018

Привет, я недавно начал работать инженером-программистом, поэтому этот вопрос может быть слишком нудным, но, пожалуйста, потерпите меня.

У меня есть три колонки, скажем, фрукты, цвет, вкус.

Фрукты могут иметь много цветов и вкусов. Но один фрукт, который имеет определенный цвет, должен иметь такой же вкус. Например, (яблочный, красный) должен иметь только один вкус. (яблоко, красный, кислый) и (яблоко, красный, сладкий) не могут существовать вместе.

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

Извините за такое ужасное описание, но если бы кто-то мог понять и помочь мне, я был бы очень признателен.

Ответы [ 3 ]

0 голосов
/ 01 мая 2018

Чтобы найти фрукты с разными вкусами для одного цвета:

select  fruit
from    fruit
group by
        fruit
,       color
having  count(distinct taste) > 1

Чтобы отобразить все строки, связанные с этими фруктами:

select  *
from    (
        select  count(*) over (partition by fruit, color) cnt
        ,       *
        from    fruits
        group by
                fruit
        ,       color
        ,       taste
        ) sub
where   cnt > 1

Рабочий пример в SQL Fiddle.

0 голосов
/ 01 мая 2018

Положите PK или уникальное ограничение на фрукты, цвет

select * 
from (select *, count(*) over (partition by fruit, color) as cnt 
      from table 
     ) t 
where t.cnt > 1 
order by fruit, color
0 голосов
/ 01 мая 2018

Использование row_number() функция

select * from (select *,
                    row_number() over (partition by fruit, taste order by fruit) Seq 
               from table t) t 
where Seq > 1;

Таким образом, вы нашли Seq nos> 1, если фрукты имеют дублированный вкус, и вы можете отфильтровать и удалить их, используя subquery с delete statment

delete t 
from  (select *,
           row_number() over (partition by fruit, taste order by fruit) Seq 
       from table t) t
where Seq > 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...