我所做的是創建一個名爲Rent2的臨時表來存放我的客戶端已註冊的所有重複模塊,然後在刪除臨時表之前執行刪除內部聯接語句。爲什麼我需要運行這個腳本兩次刪除所有重複?
但是在完成後總會有剩餘的重複。我在這裏做錯了什麼?
CREATE TABLE IF NOT EXISTS `tblRent2` (
`IdRent` INT(11) NOT NULL)
ENGINE = InnoDB;
INSERT INTO tblRent2 (SELECT IdRent FROM tblRent WHERE IdModule = 1 GROUP BY IdClient HAVING COUNT(IdModule) > 1);
INSERT INTO tblRent2 (SELECT IdRent FROM tblRent WHERE IdModule = 2 GROUP BY IdClient HAVING COUNT(IdModule) > 1);
INSERT INTO tblRent2 (SELECT IdRent FROM tblRent WHERE IdModule = 3 GROUP BY IdClient HAVING COUNT(IdModule) > 1);
INSERT INTO tblRent2 (SELECT IdRent FROM tblRent WHERE IdModule = 4 GROUP BY IdClient HAVING COUNT(IdModule) > 1);
INSERT INTO tblRent2 (SELECT IdRent FROM tblRent WHERE IdModule = 5 GROUP BY IdClient HAVING COUNT(IdModule) > 1);
INSERT INTO tblRent2 (SELECT IdRent FROM tblRent WHERE IdModule = 6 GROUP BY IdClient HAVING COUNT(IdModule) > 1);
INSERT INTO tblRent2 (SELECT IdRent FROM tblRent WHERE IdModule = 999 GROUP BY IdClient HAVING COUNT(IdModule) > 1);
DELETE r.* FROM tblRent r INNER JOIN tblRent2 r2 ON
r.idRent = r2.idRent;
SELECT * FROM tblRent2;
DROP TABLE tblRent2;
原始表看起來是這樣的:
IdRent | IDClient | IdModule
1 | 30 | 999
2 | 30 | 999
3 | 31 | 1
4 | 31 | 1
這些都是主鍵。
這些不是*主*鍵,它們是*外*鍵(*其他*表的主鍵)。不過,在重複的情況下,你想刪除哪些行? – Bohemian
我知道它們看起來像外鍵,但是將它們用作主鍵,其他表存在但不被引用爲外鍵。 (我們希望通過此修補程序進行更正)。 – overmann
我想刪除的重複項是IdModule重複項,修復後重復的idClients可以存在,只要它們之間存在不同的模塊引用即可。 – overmann