MySQL有些列是不同的

MySQL有些列是不同的,mysql,Mysql,我有一个很好的查询 SELECT DISTINCT city,region1,region2 from static_geo_world where country='AU' AND (city LIKE '%geel%' OR region1 LIKE '%geel%' OR region2 LIKE '%geel%' OR region3 LIKE '%geel%' OR zip LIKE 'geel%') ORDER BY city; 我还需要提取一个名为“id”的列,但这会弄乱DI

我有一个很好的查询

 SELECT DISTINCT city,region1,region2 from static_geo_world where country='AU' AND
 (city LIKE '%geel%' OR region1 LIKE '%geel%' OR region2 LIKE '%geel%' OR region3 LIKE '%geel%' OR zip LIKE 'geel%') ORDER BY city;
我还需要提取一个名为“id”的列,但这会弄乱DISTINCT,因为每个id都不同

我如何才能获得与上述相同的唯一记录集,同时还可以获得每个记录的“id”? 注意:有时我可以返回几千条记录,因此无法查询每条记录

任何想法都是非常受欢迎的

例如:

表可能有以下内容

 ID Country zip  region1        region2  region3 City
 1  AU      3323 geelong        victoria         Geelong
 2  AU      3324 geelong        victoria         Geelong
 3  AU      3325 Geelong North  victoria         Geelong
我想得到城市、地区1和地区2的不同集合,因为不同的邮政编码上可能有重复项。这是当前查询所做的。但是我还想获得ID,因为这是我将作为引用放入所选记录的DB中的ID

所需结果:

我希望能够得到独一无二的“城市、区域1、区域2”

 geelong geelong victoria
 geelong geelong north victoria
初始查询得到这些结果

但我还想知道已经返回的记录的ID。我将在DB中存储的用户配置文件中使用此ID。例如:

 1 geelong geelong victoria
 3 geelong geelong north victoria
希望这能更好地解释。
还需要包括返回的不同记录ID。

我没有检查此项,但不起作用:

SELECT DISTINCT (city,region1,region2), ID from static_geo_world where country='AU' AND
 (city LIKE '%geel%' OR region1 LIKE '%geel%' OR region2 LIKE '%geel%' OR region3 LIKE '%geel%' OR zip LIKE 'geel%') ORDER BY city;

希望这能奏效

你不能做你似乎要求的事情:

输入数据:

ID  City   Region1  Region2
--- ------ -------- --------
 1  geel1  geel2    geel3
 2  geel1  geel2    geel3
 3  geel4  geel5    geel6
 4  geel1  geel2    geel3
查询select distinct city、region1、region2返回

删除重复行后,行不再具有唯一ID。你说

我如何才能获得与上述相同的唯一记录集,同时还可以获得每个记录的“id”

但是对于返回的第一行,有三个可能的id,为每个记录请求“id”是没有意义的

编辑

如果您只想要最低的ID,您可以这样做:

select min(id),city,region1,region2 from ... where ... group by city,region1,region2
改为使用groupby

SELECT id , city,region1,region2 from static_geo_world where country='AU' AND
(city LIKE '%geel%' OR region1 LIKE '%geel%' OR region2 LIKE '%geel%' OR region3 LIKE     '%geel%' OR zip LIKE 'geel%') ORDER BY city group by city;

这将返回您需要的内容。但从db记录中,它将始终选择找到的第一条记录,这意味着如果city='A',并且此city有许多记录,它将选择找到的第一条记录并返回其id

。我将不同的列放在括号中后立即出错。如果您使用的是mysql5或更高版本,这可能无法工作。对不起,我帮不上忙了!没关系。。。你不工作。。。谢谢你的想法。。谢谢。我已经在我的答案中添加了这样做的方法。然而,这样做是不好的设计。也许,如果你能从概念上解释一下你想要实现的目标,我们就能为你指明一个更好的方向。我有一个数据库,里面有超过600万个位置。DB-eg中存在重复:城市有2到50个不同的邮政编码,但它是同一个城市。我不想更改数据库,因为搜索也适用于邮政编码。因此,我只想了解一组独特的位置,这可以通过DISTINIC实现。我认为需要在他们的个人资料中记录用户的选择,并希望将其链接到ID。这就是我想要ID的原因。如果我需要解释更多,请告诉我。您的问题陈述了两个不可调和的目标。您希望在city、region1、region2中折叠具有相同值的多个记录,但需要这些记录的所有不同ID。我建议您写出一些输入示例以及您试图完成的任务。好的,您已经添加了输入数据。现在,显示您希望从此查询中获得的结果集,包括ID列。为什么返回的ID是1而不是2?这可能是DISTINIC的限制。是否有其他方法来执行我尝试执行的查询?数据正在从服务器传递回浏览器。当用户选择一个时,我想获取ID并将其放入数据库中的用户配置文件中。该ID将作为我的参考。我听到你说的了。对于上面的第一个查询结果行,你希望返回哪个ID?1、2或4?事实上,只要每次都是相同的,这并不重要。我有一个超过6mil位置的表,只要查询给出相同的结果,它就会工作。在你的情况下,我只会有1和3个ID,这是第一个被发现的。
SELECT id , city,region1,region2 from static_geo_world where country='AU' AND
(city LIKE '%geel%' OR region1 LIKE '%geel%' OR region2 LIKE '%geel%' OR region3 LIKE     '%geel%' OR zip LIKE 'geel%') ORDER BY city group by city;