2
我正在嘗試制定數據遷移的最佳方法。將具有dupe的MySQL表遷移到具有UNIQUE約束的另一個表的最佳方法
我遷移從表中的一些數據(〜8000行)這樣的:
CREATE TABLE location (
location_id INT NOT NULL AUTO_INCREMENT UNIQUE PRIMARY KEY,
addr VARCHAR(1000) NOT NULL,
longitude FLOAT(11),
latitude FLOAT(11)
) Engine = InnoDB, DEFAULT CHARSET=UTF8;
一個表是這樣的:
CREATE TABLE location2 (
location_id INT NOT NULL AUTO_INCREMENT UNIQUE PRIMARY KEY,
addr VARCHAR(255) NOT NULL UNIQUE,
longitude FLOAT(11),
latitude FLOAT(11)
) Engine = InnoDB, DEFAULT CHARSET=UTF8;
這不是重要的是保持主鍵。
「位置」中的地址被重複多次。大多數情況下經緯度相同。但在某些情況下,addr具有相同的值,但緯度和經度的值不同。
最終的location2表應該有位置中每個唯一addr條目的一個條目。如果緯度/經度有多個可能的值,則應使用最新的(最高的location_id)。
我創建了一個過程來做到這一點,但它不喜歡addr相同但緯度/經度不同的行。
DROP PROCEDURE IF EXISTS migratelocation;
DELIMITER $$
CREATE PROCEDURE migratelocation()
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a VARCHAR(255);
DECLARE b, c FLOAT(11);
DECLARE cur CURSOR FOR SELECT DISTINCT addr, latitude, longitude FROM location;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN cur;
REPEAT
FETCH cur INTO a, b, c;
IF NOT done THEN
INSERT INTO location2 (addr, latitude, longitude) VALUES (a, b, c);
END IF;
UNTIL done END REPEAT;
CLOSE cur;
END $$
DELIMITER ;
CALL migratelocation();
有沒有很好的方法來做到這一點?我一直想放棄並寫一點PHP編程,但我寧願學習正確的SQL方法。
也許我只需要找到正確的第一個表的SELECT和我可以使用:
INSERT INTO location2 SELECT ... ;
遷移數據。
謝謝!
這正是這個男人所說的。非常感謝。 – 2010-09-05 04:10:17