我的MySQL表country_phone_codes看起来像这样
id country_code area_code name
------------------------------------------------------------
1 | 93 | 93 | AFGHANISTAN
2 | 93 | 9370 | AFGHANISTAN - MOBILE
3 | 93 | 9375 | AFGHANISTAN - MOBILE
4 | 355 | 355 | ALBANIA
5 | 355 | 35568 | ALBANIA - MOBILE - AMC
6 | 213 | 213 | ALGERIA
7 | 213 | 2131 | ALGERIA - CAT
------------------------------------------------------------
这些只是超过28000条记录的少数记录。我正在尝试制定一个查询,它将为我提供如下结果 -
country_code name
-----------------------------
93 | AFGHANISTAN
355 | ALBANIA
213 | ALGERIA
-----------------------------
使用SELECT DISTINCT(country_code) FROM country_phone_codes ORDER BY country_code LIMIT 0,260
,我可以获得不同的国家/地区代码。但是如何获得相应的国家名称?
答案 0 :(得分:3)
要选择不同的country_code,名称对:
select country_code, name
from country_phone_codes
where country_code = area_code;
答案 1 :(得分:3)
答案很简单,使用GROUP BY
:
SELECT country_code,MIN(name)
FROM country_phone_codes
GROUP BY country_code;
DISTINCT
不需要ORDER BY
功能和GROUP BY
。由于最初的问题与MySQL有关,因此MIN()
聚合函数不是必需的,如果满足以下所有条件,您可能会看到更好的性能:
这是因为InnoDB存储引擎将按主键的顺序扫描,对于非聚合列,它将使用它找到的第一个值。
答案 2 :(得分:0)
您还需要对country_code进行分组然后&那么只有你会得到正确的匹配结果。
SELECT country_code,name
FROM country_phone_codes
group by country_code
ORDER BY country_code
我们应该避免在select子句中使用Distinct
,因为它会产生性能问题。
而不是我们可以使用group by
答案 3 :(得分:0)
由于您似乎想要选择那些area_code与country_code相同的行,您可以选择area_code和country_code相等的那些行:
SELECT country_code, name
FROM country_phone_codes
WHERE area_code = country_code;
如果可能存在多个具有相同区号和国家/地区代码的行,则可以使用DISTINCT为每个(country_code,name)元组仅选择一行。
SELECT DISTINCT country_code, name
FROM country_phone_codes
WHERE area_code = country_code;
答案 4 :(得分:0)
好像你在country_code和name之间有一对多的关系。
如果您执行简单的GROUP BY查询,例如
SELECT country_code,name FROM country_phone_codes GROUP BY country_code
你最终可能
country_code name
-----------------------------
93 | AFGHANISTAN
355 | ALBANIA
213 | ALGERIA
124 | COUNTRY - MOBILE
-----------------------------
假设您的所有国家/地区名称都是
COUNTRY
COUNTRY - SOMETHING
COUNTRY - SOMETHING - SOMETHING
最好使用
SELECT country_code,MIN(name) FROM country_phone_codes GROUP BY country_code
所以你最终得到了
country_code name
-----------------------------
93 | AFGHANISTAN
355 | ALBANIA
213 | ALGERIA
xxx | COUNTRY
-----------------------------
这假设你的表中有这两个记录
id country_code area_code name
------------------------------------------------------------
xx | xxx | xx | COUNTRY
xx | xxx | xx | COUNTRY - SOMETHING
------------------------------------------------------------