我有一个城镇和地区的mysql表,我希望使用SQL语句将它组合成一个唯一的“地点”列表。
表格格式为id | town | region
我需要保持现在的格式,因为我想让用户能够从此列表中选择城镇或区域 - 因为一些较小的城镇或村庄可能不在此列表中 - 其中如果选择了区域。
我如何才能最好地将这两个字段合并为一个列表?有些example rows
可能是 -
ID | Town | Region
1 | Camden | Greater London
2 | Bromley | Greater London
所以我希望Camden
和Greater London
使用mysql语句在此列表中出现一次。我以各种方式尝试了union
和distinct
,但哪种方法最好?
答案 0 :(得分:3)
如果你希望它们出现在一个字段中,这应该可以解决问题:
SELECT town AS place FROM towns
UNION
SELECT region AS place FROM towns;
注意,除非使用UNION
,否则DISTINCT
会产生隐含的UNION ALL
效果。
此外,不需要第二个别名; UNION使用第一个SELECT联合的标识符。我只是为了清晰起见。
第一个SELECT将为您提供以下城镇列表:
Camden
Bromley
Bedford
第二个会给你一个区域列表,例如:
Greater London
Greater London
Lesser London ;)
UNION合并这些结果并采用不同的结果,结果为:
Camden
Bromley
Bedford
Greater London
Lesser London ;)
如果结果不止一次,那么表格中的“ABC”和“ABC”之类的东西几乎总是一种错觉;有时它甚至是由于字符串中有非打印字符(可能更难以检测和解决)。
答案 1 :(得分:1)
怎么样:
select distinct town from towns
union
select distinct region from towns
答案 2 :(得分:0)
select distinct var1, var2 from test;
请参阅链接的sqlfiddle
http://sqlfiddle.com/#!9/f21730/1
这是你想要的吗?
或
您希望将这两列合并为一个吗?
select distinct var1 as combined from test union
select distinct var2 as combined from test