2011-07-27 45 views
0

我有一個世界分貝。下面的表格由以下產生:使用MySQL消除重複的行DISTINCT

SELECT * 
FROM geolocations 
WHERE city = 'Santa Cruz' 

該表格包含每個城市的多個條目,它包含一個郵政編碼字段。 我想刪除城市的重複條目。我試着使用:

CREATE TABLE tmp 
SELECT DISTINCT city, region 
FROM geolocations 

前面的語句消除了重複的條目,但我如何獲得ID和其他領域複製到新表?

----------------------------------------------------------------------- 
id Country Region  City  Latitutde   Longitude 
----------------------------------------------------------------------- 
4683 US CA Santa Cruz 37.0447998047 -122.1020965576  
5748 US CA Santa Cruz 36.9712982178 -121.9875030518  
9506 US CA Santa Cruz 37.0101013184 -122.0324020386  
11205 US CA Santa Cruz 37.0344009399 -121.9796981812  
11379 US CA Santa Cruz 36.9898986816 -122.0603027344  
13146 US CA Santa Cruz 37.0101013184 -122.0324020386  
14362 US CA Santa Cruz 37.0101013184 -122.0324020386  
30055 BO 03 Santa Cruz -12.2833003998 -66.2500000000 
31760 ES 59 Santa Cruz 42.6666984558 -2.3499999046  
39477 AR 22 Santa Cruz -27.6667003632 -64.2667007446 
----------------------------------------------------------------------- 
+0

你不是真的消除重複行,你知道。從您提供的示例數據可以看出,這些行不是重複的。該行中的某些字段是重複的,但顯然某些位置數據對於每行都不相同。 SQL無法神奇地爲你挑選額外數據的隨機實例。 我想你應該把這張桌子分成兩張桌子:一張持有國家,地區和城市。然後是與該表格相關的另一個表格,該表格包含經度和緯度讀數。第二個表在第一個表中可能每行有多行。 – Marvo

回答

0

在MSSQL中它的這種」

SELECT distinct City, Region 
INTO tmp 
FROM geolocations 
WHERE City = 'Santa Cruz' 

在MySQL中,你可以使用select into table

雖然我還沒有測試它,這樣的事情應該工作:

INSERT INTO tmp(City, Region) 
    SELECT distinct City, Region 
    FROM geolocations WHERE WHERE City = 'Santa Cruz' 
+0

我得到_錯誤#1136 - 當我執行INSERT INTO tmp(location_id,country,region,city,latitude,longitude)時,列計數與第1_行的值計數不匹配SELECT DISTINCT region,city FROM geolocations'我想要只選擇城市,地區明顯,並轉移到其他領域爲現在的單一條目。 – Enki

+0

Ahar ....但其他字段不是唯一的,在每個城市的數據中都有多個緯度和緯度,通過添加其他字段可以使查詢不唯一。您需要通過多個步驟來處理它。首先創建唯一記錄,然後在另一個查詢中設置平均長/格每條記錄(或手動設置正確的長/格) – JonAlb

+0

數據庫中有300K條目,它不認爲手動更新是一個可行的選項,也沒有必要平均我只需要靠近城市的一個點。 – Enki

0

由於馬爾沃說,這些行不是固定的,而是一些字段重複,最好的方法是重新設定簽署數據庫並將該表分成兩個 - 至少 - 。這可能爲您服務爲出發點:

首先創建一個包含不同-uniques-城市的表:

CREATE TABLE city SELECT DISTINCT city FROM db 

添加一個主鍵到表:

ALTER TABLE city ADD id_city INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST 

創建一個表包含所有記錄和每條記錄所屬的相應城市的標識:

CREATE TABLE records SELECT db.id,db.country, db.region, city.id_city, db.lat,db.long FROM db INNER JOIN city ON db.city = city.city 

如果您願意,您可以爲與城市相關的城市制作另一個城市。

+0

前兩個步驟順利進行,但是當我執行這個'CREATE TABLE記錄SELECT db.id,db.country,db.region,city.id_city,db.lat,db.long FROM db INNER JOIN city ON db.city = city.city'超時。有什麼建議麼? – Enki

0

此查詢工作我想選擇不同的城市,地區組合,並將其與新表中的相關數據分組。

CREATE TABLE clean_gls SELECT * FROM geolocations GROUP BY city, region;