我已經使用臨時表刪除了mysql表中的重複行。有沒有可能不使用它?我搜查了很多,但沒有找到任何解決方案。在沒有臨時表的情況下刪除mysql中的重複條目
number | status | service 1234 | A | x1 1234 | D | x1 1234 | D | x1 1234 | A | x2 1234 | D | x2 2345 | A | x1
我的基本需求是,應該只有一個行,它是一個特定的數字和服務instatus d。在表中有很多條目的
我已經使用臨時表刪除了mysql表中的重複行。有沒有可能不使用它?我搜查了很多,但沒有找到任何解決方案。在沒有臨時表的情況下刪除mysql中的重複條目
number | status | service 1234 | A | x1 1234 | D | x1 1234 | D | x1 1234 | A | x2 1234 | D | x2 2345 | A | x1
我的基本需求是,應該只有一個行,它是一個特定的數字和服務instatus d。在表中有很多條目的
一種可能解決方法是讓MySql執行約束條件的作業(IGNORE
選項(將錯誤作爲警告處理),從而有效地重複刪除表格
ALTER TABLE Table1 ENGINE MyISAM; -- this obviously needed only if your ENGINE is not MyISAM
ALTER IGNORE TABLE Table1 ADD UNIQUE (`number`, `status`, `service`);
ALTER TABLE Table1 ENGINE InnoDB; -- again this is only needed if your ENGINE was other than MyISAM
後,你會得到:
| NUMBER | STATUS | SERVICE | ----------------------------- | 1234 | A | x1 | | 1234 | A | x2 | | 1234 | D | x1 | | 1234 | D | x2 | | 2345 | A | x1 |
下面是SQLFiddle演示
DELETE t
FROM Table1 t JOIN
(
SELECT number, status, service, MAX(serial) serial
FROM Table1
GROUP BY number, status, service
HAVING COUNT(*) > 1
) q ON t.number = q.number
AND t.status = q.status
AND t.service = q.service
AND t.serial <> q.serial
結局都是一樣的:
| SERIAL | NUMBER | STATUS | SERVICE | -------------------------------------- | 1 | 1234 | A | x1 | | 4 | 1234 | A | x2 | | 3 | 1234 | D | x1 | | 5 | 1234 | D | x2 | | 6 | 2345 | A | x1 |
這裏是SQLFiddle演示
尋求幫助 –
你可以嘗試這樣的事情: -
DELETE t1 FROM table t1, table t2 WHERE t1.name = t2.name AND t1.id > t2.id;
提供姓名和身份證都在表中的列
結帳這個link
我不能使用運算符,因爲它是一個重複的字符。 –
這要看情況。你必須更具體一些,並提供表架構,樣本數據,期望的結果 – peterm
可能重複的[刪除重複的記錄,而不創建臨時表](http://stackoverflow.com/questions/8590010/delete-duplicate-records-沒有創建臨時表) –
@PreetSangha:沒有那個解決方案dosnt套件我的要求。 –