如何在 MySQL 字段中选择逗号分隔值的唯一值?

Posted

技术标签:

【中文标题】如何在 MySQL 字段中选择逗号分隔值的唯一值?【英文标题】:How to select the unique values of a comma separated values in MySQL field? 【发布时间】:2012-03-20 15:55:27 【问题描述】:

类似这样的:

Select UNIQUE_VALUES('1,2,3,5,3,4,2,1,2,3,1,4') as CSVUnique

这样做的结果将是:

CSVUnique
1,2,3,5,4

谢谢!

【问题讨论】:

阅读SELECT DISTINCT@dev.mysql.com/doc/refman/5.5/en/select.html @MikePurcell - OP 想要来自单个逗号分隔字符串的不同值,而不是来自列的不同行值。 等等,他实际上是这样存储值的?我认为这是一个初学者问题,认为他是从多行中选择的。哎呀。 【参考方案1】:

mysql 无法像这种方式获得独特性。

首先,以这种方式存储值很糟糕。您应该使用父子表来存储此类数据,而不是存储 com,分隔值。或者应该在插入之前过滤此类重复项。

规范化你的数据库。

从表中获取值并使用 php explode() ,并使用 array_unique 删除重复值。

【讨论】:

***.com/questions/4537838/…的可能重复 有一些方法(仅使用 MySQL)可以获得唯一值。但是 +1 建议正常化。 @ypercube :是的,可以尝试使用存储过程。但我在这里的意图是在问题中发布的方式 UNIQUE_VALUES(...).... 不在 mysql 中【参考方案2】:

这是一种方法

CREATE TABLE t
( vals VARCHAR (100));
INSERT INTO t VALUES('1,2,3,5,3,4,2,1,2,3,1,4');


SELECT
  GROUP_CONCAT(DISTINCT SUBSTRING_INDEX(SUBSTRING_INDEX(vals, ',', n.digit+1), ',', -1)) val
FROM
  t
  INNER JOIN
  (SELECT 0 digit UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3  UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6) n
  ON LENGTH(REPLACE(vals, ',' , '')) <= LENGTH(vals)-n.digit;

See it working

【讨论】:

以上是关于如何在 MySQL 字段中选择逗号分隔值的唯一值?的主要内容,如果未能解决你的问题,请参考以下文章

带有逗号分隔值的 Codeigniter Mysql 列

如何对查询中的字段进行编程,以在该记录的子数据表中显示逗号分隔的唯一值列表?

mysql - 约束

如何在 MySQL 的逗号分隔字段中获取最大值?

mysql中选定值的逗号分隔字符串

匹配 Redshift 中逗号分隔字段中的值