mysql SELECT返回每个匹配项之一

时间:2013-04-09 19:11:32

标签: mysql select limit

我正在处理需要地址信息的用户注册表。

我有一张表,其中有大约120万个国家/州/州/邮政编码,涵盖了整个世界。

鉴于某个国家/地区,我想选择该国家/地区的所有州。使用以下查询和“美国”作为示例查询,我得到大约49,000条记录,我只想要50 ...每个州一个!)

SELECT state FROM locales WHERE country='US'

结果如下:

Alaska
Alaska
Alaska
Alaska
Alaska

代表:

Akutan, Alaska
Cold Bay, Alaska
False Pass, Alaska
King Cove, Alaska
Sand Point, Alaska

我只想要一个阿拉斯加州,一个科罗拉多州,一个格鲁吉亚......

同样地,给定一个州我想选择该州的所有城市并给予一个城市,该城市的所有拉链。

我如何编写查询来限制此问题,如何设置指标以优化这些查询?

4 个答案:

答案 0 :(得分:1)

使用DISTINCT限制重复条目。

SELECT DISTINCT state FROM locales WHERE country='US'

答案 1 :(得分:1)

DISTINCT将帮助您:

SELECT DISTINCT state FROM locales WHERE country='US'

答案 2 :(得分:0)

SELECT DISTINCT state FROM locales WHERE country='US' LIMIT 50;

给定一个州我想选择该州的所有城市并给予一个城市,该城市的所有拉链。 再假设您只需要50个列表(如果您想要所有其他人,请删除LIMIT 50): 并使用表中的相应列名替换下面的字段。

SELECT DISTINCT state, city, zip FROM locales WHERE country='US' LIMIT 50;

如果你想要前50个州的城市和邮编列表:

SELECT state, city, zip FROM locales WHERE country='US' and state in (SELECT DISTINCT state FROM locales WHERE country='US' LIMIT 50);

答案 3 :(得分:0)

使用此限制

  

SELECT DISTINCT state FROM locales WHERE country ='US'LIMIT 0,50