首页 > 解决方案 > 如何跨列比较逗号分隔值

问题描述

我有一列,其中值是逗号分隔的不同表中其他 2 个字段的组合。该列如下所示:

col1    col2    col3
1   A,B 100
2   A,C 200
3   B,A 300
4   D,F 400
5   C,A 100
6   F,E 200
7   F,D 10000

当我在 col2 级别聚合时,我A,B & B,A分别得到,问题是 A,B=B,A。我怎样才能创建第四列,它只是将这种情况标记为A,B or B,A。两者都可以,只要它们是一致的。

标签: mysqlsql

解决方案


这很可能是一个可怕的数据结构。您不应该将值存储在逗号分隔的列表中。如果您总是有两个值,那么您可以使用两列。或者,您可以使用联结/关联表。

我建议将值分成两列:

select t.*,
       least(substring_index(col2, ',', 1), substring_index(col2, ',', -1)) as col2_1,
       greatest(substring_index(col2, ',', 1), substring_index(col2, ',', -1)) as col2_2
from t;

新列,col2_1并且col2_2是规范排序的,因此反转原始值并不重要。


推荐阅读