2013-06-28 3 views
0

Как мы можем удалить несколько строк, имеющих столбцы из db? Пусть дб имеет следующие данные (идентификатор, LIST_NAME, пользовательские) и LIST_NAME имеет значения, как:SQL-запрос для удаления нескольких строк

Owner-aaa 
coowner-aaa 
owner-aaa 
subowner-aaa 

Как мы можем удалить строки, имеющие «Владелец-ааа» и «владелец-ааа», которые являются дубликатами?

Можно ли добавить что-то в этом запросе здесь:

delete from <table_name> where list_name = 'owner-aaa' 

Но он удаляет только нижний список случая, я хочу что-то общее, который проверяет дубликаты в малых и колпачках и удалить их оба?

Заранее спасибо Эх

+0

Вы хотите удалить владельца-aaa и owner-aaa, или хотите сохранить только один и удалить все остальные? – fthiella

+0

или вы хотите удалить все дублированные строки? –

+0

Я хотел удалить все строки ... -Amy – Amy

ответ

1
delete from tableName where LOWER(list_name) = 'owner-aaa' 
+0

Кто бы ни отклонил, OP ничего не сказал о сохранении строк, просто для удаления строк, независимо от того, являются ли значения верхними или нижними. – fancyPants

+0

да, вы правы -Amy – Amy

+0

OP заявили, что хотят чего-то общего, в этом есть жестко закодированное значение. – gareththegeek

0
DELETE a 
FROM list a 
INNER JOIN list b ON LOWER(a.list_name)=LOWER(b.list_name) 
WHERE a.id <> b.id 
1
DELETE FROM mytable WHERE LOWER(listname) IN 
(SELECT LOWER(listname) FROM mytable 
GROUP BY LOWER(listname) 
HAVING COUNT(*) > 1) 
+0

mysql обычно игнорирует регистр при группировке, но не позволяет вам использовать предложение IN в запросе удаления – fthiella

+0

Это будет работать, но удалит все записи, для которых существует дубликат (то есть он не оставит его) – Curt

+0

Да, Я не уверен в MySQL, и да, он удаляет все обманы, вот как я интерпретировал этот вопрос. –

0

Meaby вы можете использовать нижние/верхние функции SQL.

Но вы уверены, что модель верна? Кажется, странно, что у вас есть список имен. Это должна быть другая таблица NAMES с полем ID и NAME. Это отношение 1-N.

0

Я не совсем уверен в вашем вопросе, хотите ли вы удалить все строки, где дубликаты происходят, или оставить их, и удалить только истинные дубликаты. Так вот выстрел в каждом:

Чтобы удалить только истинные дубликаты:

DELETE FROM MyTable WHERE id IN 
(
    SELECT T1.id 
    FROM MyTable T1 
      INNER JOIN MyTable T2 
      ON UPPER(T1.list_name) = UPPER(T2.list_name) 
      AND T2.id <> T1.id 
      AND (T1.id <> (SELECT MAX(id) FROM MyTable WHERE UPPER(list_name) = UPPER(T1.list_name)) 
) DUPS 

Это предполагает, что поле ID является уникальным для каждой записи

Чтобы удалить всех записей, где Есть дубликаты , удалите два предложения «AND» в подзапросе.

+0

Я хочу удалить все строки, например. owner-aaa и Owner-aaa, независимо от общего количества нет. – Amy