簡體   English   中英

SQL查詢刪除多行

[英]SQL query to delete multiple rows

我們如何刪除db中包含列的多行? 假設db具有以下數據(id,list_name,user),list_name具有以下值:

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

我們如何刪除具有“Owner-aaa”和“owner-aaa”的重復行?

我們可以在此查詢中添加一些內容:

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

但它只刪除小寫列表,我想要一些通用的檢查重復小和大寫並刪除它們?

在此先感謝艾米

delete from tableName where LOWER(list_name) = 'owner-aaa'
DELETE FROM mytable WHERE LOWER(listname) IN
(SELECT LOWER(listname) FROM mytable 
GROUP BY LOWER(listname)
HAVING COUNT(*) > 1)
DELETE a
FROM list a
INNER JOIN list b ON LOWER(a.list_name)=LOWER(b.list_name)
WHERE a.id <> b.id

Meaby你可以使用LOWER / UPPER sql函數。

但你確定你的模型是正確的嗎? 擁有這樣的名單似乎真的很奇怪。 這應該是具有ID和NAME字段的另一個表名。 這是一個1-N的關系。

我不完全確定您是否要刪除發生重復的所有行,或者保留一個,並僅刪除真正的重復項。 所以這里有一個鏡頭:

要僅刪除真正的重復項:

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”子句。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM