如何在各列之间比较逗号分隔的值

时间:2018-08-14 18:27:54

标签: mysql sql

我有一列,其中值是逗号分隔的不同表中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。只要它们一致就可以。

1 个答案:

答案 0 :(得分:4)

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

我建议将值分为两列:

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_1col2_2按规范排序,因此反转原始值无关紧要。