mysql - 如何跨列比较逗号分隔值
问题描述
我有一列,其中值是逗号分隔的不同表中其他 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
。两者都可以,只要它们是一致的。
解决方案
这很可能是一个可怕的数据结构。您不应该将值存储在逗号分隔的列表中。如果您总是有两个值,那么您可以使用两列。或者,您可以使用联结/关联表。
我建议将值分成两列:
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
是规范排序的,因此反转原始值并不重要。
推荐阅读
- python - Python嵌套字典覆盖多个值
- android - 拦截 onBackPressed,然后从 Dialog 重新发布
- java - 我的 Spring Boot 控制器方法中出现 404 错误
- angular - Angular - 'OperatorFunction' 类型的参数
' 不能分配给 'OperatorFunction 类型的参数 - r - R 奇怪的 {if-else} 行为
- elsa-workflows - Elsa-workflows 重定向 Http 动作行为
- javascript - Rails,无法自定义输入验证错误消息
- sql - 对sql查询中的行和列求和
- android - TabLayout 中的第一个选项卡未更新 TypeFace 和 TextSize
- ajax - 如何在同一个脚本中组合这两个 datepicker ajax 代码?