[英]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.