Привет, я недавно начал работать инженером-программистом, поэтому этот вопрос может быть слишком глупым, но, пожалуйста, потерпите меня.
У меня три колонки, скажем фрукты, цвет, вкус.
Фрукты могут иметь разные цвета и вкусы. Но один фрукт определенного цвета должен иметь такой же вкус. Например, (яблочный, красный) должен иметь только один вкус. (яблоко, красное, кислое) и (яблочное, красное, сладкое) не могут существовать вместе.
У меня проблема в том, что моя таблица содержит несколько повторяющихся вкусов с одинаковыми фруктами и цветами. Я пробовал разные соединения, но получил неверные результаты.
Извините за такое ужасное описание, но если бы кто-нибудь мог понять и помочь мне, я был бы очень признателен.
Привет и добро пожаловать в SO. Ответ, который вы ищете, можно найти здесь. spaghettidba.com/2015/04/24/…
Пример вопроса: stackoverflow.com/q/50008226/6327676
«Я пробовал разные соединения» ... зачем вам пробовать соединения, если у вас есть только одна таблица с тремя столбцами? Что-то мне подсказывает, что вы упускаете важные детали из своего вопроса.
Использовать функцию 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
.
delete t
from (select *,
row_number() over (partition by fruit, taste order by fruit) Seq
from table t) t
where Seq > 1;
Чтобы найти фрукты одного цвета на разные вкусы:
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
Группировать по второму не обязательно, и я уже опубликовал правильный синтаксис
@paparazzo: group by
помогает, когда есть несколько рядов с одинаковыми фруктами, цветом и вкусом. Попробуйте использовать связанный скрипт SQL Fiddle
Я подозреваю, что если есть несколько OP, то я бы хотел их увидеть.
Установите ПК или уникальное ограничение на фрукты, цвет
select *
from (select *, count(*) over (partition by fruit, color) as cnt
from table
) t
where t.cnt > 1
order by fruit, color
Не могли бы вы опубликовать примеры ваших таблиц и запросов, которые вы пробовали?