组合两列并使值不同

时间:2018-06-01 18:14:07

标签: mysql sql

我有一个城镇和地区的mysql表,我希望使用SQL语句将它组合成一个唯一的“地点”列表。

表格格式为id | town | region

我需要保持现在的格式,因为我想让用户能够从此列表中选择城镇或区域 - 因为一些较小的城镇或村庄可能不在此列表中 - 其中如果选择了区域。

我如何才能最好地将这两个字段合并为一个列表?有些example rows可能是 -

ID | Town    | Region
 1  | Camden  | Greater London
 2  | Bromley | Greater London 

所以我希望CamdenGreater London使用mysql语句在此列表中出现一次。我以各种方式尝试了uniondistinct,但哪种方法最好?

3 个答案:

答案 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

http://sqlfiddle.com/#!9/f21730/3