具有值数组

时间:2015-10-27 10:11:44

标签: mysql group-concat

mysql中的group_concat在不同的行上返回重复的值。在表字段中,值是由逗号分隔的整数数组。

id    port_id 
---- -----------
1     0,1
1     1,2
1     0,1
1     3,5
2     1
2     2,6
1     7,1

当我针对每个id查询不同的port_id时,将始终包含重复项。

select group_concat(distinct port_id) as 'grouped_ports' 
from ports 
where id =1 
group by id;

将结果显示为

grouped_ports
----------------
0,1,1,2,3,5,7,1

如何从group_concat中获取不同的值,只有0,1,2,3,5,7作为输出?

1 个答案:

答案 0 :(得分:1)

您误解了GROUP_CONCAT正在做什么改变查询来执行此操作

select group_concat(distinct port_id separator ' - ') as 'grouped_ports' 
from ports 
where id =1 
group by id;

你会看到它结合了这样的字符串

0,1 - 1,2 - 3,5 - 7,1

您需要规范化数据库才能执行此操作。这里有一些关于如何实现这个的有用链接

How to remove duplicate comma separated value in a single column in MySQL

https://dba.stackexchange.com/questions/87144/remove-duplicate-terms-from-column

你真正想要做的是创建另一个表,其中每个port_id都映射到你的表。那样你就只有唯一的port_id了