2016-03-15 2 views
0

я не знаю, как слово это проблема ясно, так, возможно, я буду использовать пример:SQL - Удаление дубликатов на основе определенных столбцов и не другие

Column1 Column2 Column3 
A   100  239.1 
A   100  0 
A   101  191.3 
B   99  0 
B   99  12.43 

Я хочу, чтобы быть в состоянии увидеть, есть дубликаты, относящиеся только к column1 и cOLUMN2, а затем сравнить эти дубликаты на основе значений, которые они имеют в колонка3 и удалить тот, который имеет 0.

Так что моя результирующая таблица будет выглядеть следующим образом:

Column1 Column2 Column3 
    A   100  239.1 
    A   101  191.3 
    B   99  12.43 

Я не совсем уверен, как это сделать, хотя любая помощь будет оценена по достоинству.

+0

Вы помещаете пример, но не объяснили логику. Например, column2 также может быть 0? –

+1

Какую базу вы используете? Пожалуйста, отметьте соответствующим образом. –

+0

Возможно, вам будет полезно немного расширить ваш пример. Как бы то ни было, вы можете получить тот же результат, просто удалив все строки, где 'Column3' равен' 0'. –

ответ

0

Вы должны присоединиться таблицу к себе, что-то вроде (если таблица называется «цифры» для ЭГ)

select yourcols 
    from figures a, figures b 
    where a.col1 = b.col1 
    and a.col2 = b.col2 
    and (a.col3 = '0' or b.col3 = '0') 

и изменения, что удаление объекта, когда вы счастливы, что находит ваши строки в delete ...

0

Основываясь на ваших данных, вы можете просто DELETE FROM tab WHERE column3 = 0, но это может быть слишком упрощено.

Это проверка на 0 и дополнительные строки <> 0 в column3:

select * 
from tab as t1 
where column3 = 0 
and exists 
( 
    select * 
    from tab as t2 
    where t1.column1 = t2.column1 
    and t1.column2 = t2.column2 
    and t2.column3 <> 0 
) 

Просто изменится DELETE если это возвращает правильные строки ...

1

Вы могли бы искать предложения GROUP BY

Select column1, column2, SUM(column3) as col3 GROUP BY column2; 
0

для просмотра строки должны работать

выберите col1, col2, col3 FROM yourtable t WHERE col3> 0 ИЛИ (col1, col2) NOT IN (SELECT col1, col2 FROM yourtable t2 WHERE col3> 0 И t.col1 = t2.col1 и t.col2 = t2.col2)

если вы любите удалить эти строки попробовать

удалить из yourtable т ГДЕ col3 = 0 AND (col1, col2) = ANY (SELECT col1, col2 FROM t2 WHERE yourtable col3> 0 И t.col1 = t2.col1 и t.col2 = t2.col2)

Смежные вопросы