2011-07-27 46 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;