2013-06-28 36 views
0

如何刪除包含來自數據庫的列的多行? 假設分貝以下具有數據(ID,LIST_NAME,用戶)和LIST_NAME具有值:用於刪除多行的SQL查詢

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

我們怎樣才能刪除其「所有者AAA」和「擁有AAA」,這是重複的行?

我們可以添加一些在此查詢這裏:

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

但它僅刪除小寫的名單,我想要的東西一般,檢查重複的小帽子,並刪除他們兩個?

在此先感謝 艾米

+0

你想刪除Owner-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函數。

但你確定你的模型是正確的嗎?有一個像這樣的名單似乎很奇怪。這應該是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

我想刪除所有行,例如。所有者aaa和所有者aaa均不計算總數。 – Amy