Group_concat 在具有值数组的行上

Group_concat on rows with array of values

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

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?

您误解了 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

您真正想要做的是制作另一个 table,其中每个 port_id 映射到您的 table。这样你就已经只有唯一的 port_id 的