0
我想正常化一個大的數據集,我已經建立了一個所有的關係表,稱爲應用程序(earances)。然後,我循環遍歷另一個表來構建一個包含重複項的臨時表,其中MasterID是我想保留的表。打開同一表兩次更新
然後我嘗試更新應用表,換任何重複的ID爲相應的主ID,但我得到的錯誤:無法重新打開表格:'d'。
下面是代碼:
DROP TABLE IF EXISTS Duplicates;
CREATE TEMPORARY TABLE Duplicates (
MasterID int NOT NULL,
DuplicateID int NOT NULL
);
INSERT INTO Duplicates(MasterID, DuplicateID)
SELECT p1.PlayerID as MasterID, p2.PlayerID as DuplicateID
FROM Player p1
LEFT JOIN Player p2 on p1.Name = p2.Name
WHERE p1.name = p2.name
AND p1.PlayerID < p2.PlayerID
ORDER BY p1.PlayerID;
UPDATE app a
SET a.PlayerID = (SELECT d.MasterID FROM Duplicates d WHERE a.PlayerID = d.DuplicateID LIMIT 1)
WHERE a.PlayerID in (SELECT d.DuplicateID FROM Duplicates d);
DELETE Player p
WHERE PlayerID = (SELECT d.DuplicateID FROM Duplicates d)
DROP TABLE Duplicates;
問題與更新查詢,我已經把其他查詢中,讓你可以什麼事情的一個更好的主意,我覺得CTE會在這裏更好,但我不知道我該怎麼做。我現在在MYSQL中運行它,但我可以使用另一個SQL變體。
感謝您的幫助
還沒有工作,例如PlayerID 767仍然在存在應用程序表,它應該被替換爲1 –
第一個查詢有效,但第二個不是 –
@CraigHarley。 。 。這很好奇。我希望這兩個工作。 –