mysql - MySQL /在集合中查找不在列中的值
问题描述
我有一些包含逗号分隔列表和三列的数据。我想要的是找到存在于列表中但不存在于任何列中的值。
数据:
+-------+-------+--------+-----------------+
| col_a | col_b | col_c | list |
+-------+-------+--------+-----------------+
| red | NULL | green | yellow,blue |
| red | blue | green | red,blue,green |
| red | NULL | yellow | green |
| blue | white | green | red,white,green |
| NULL | NULL | NULL | red,blue,green |
+-------+-------+--------+-----------------+
期望的输出:
+-------+-------+--------+-----------------+----------------+
| col_a | col_b | col_c | list | unmatched |
+-------+-------+--------+-----------------+----------------+
| red | NULL | green | yellow,blue | yellow,blue |
| red | blue | green | red,blue,green | |
| red | NULL | yellow | green | green |
| blue | white | green | red,white,green | red |
| NULL | NULL | NULL | red,blue,green | red,blue,green |
+-------+-------+--------+-----------------+----------------+
目前我有一个有效的查询,但它非常难看:
SELECT *,
TRIM(
BOTH ',' FROM
REPLACE(
REPLACE(
REPLACE(
REPLACE(
LIST,
IFNULL(col_a,''),
''
),
IFNULL(col_b,''),
''
),
IFNULL(col_c,'')
,''
),
',,',
','
)
) AS unmatched
FROM color_list
有没有更简洁的方法来查找unmatched
值?我在这里做的事情真的很难扩展,而且感觉很尴尬和脆弱。
解决方案
推荐阅读
- oracle - 如何捕获更新列值并使用它?
- spring-integration - Spring Cloud Stream @StreamListener 和 Spring Integration 的 Resequencer 模式
- c# - MetadataExtractor 不从视频文件中提取数据
- r - 根据数据框 B 中的信息,在数据框 A 的列中填写 TRUE/FALSE
- reactjs - 通过编辑和存储状态对基本待办事项列表做出反应
- git - git 存储库中的内务管理
- python - 无法改变派生类的默认参数列表
- javascript - 基于另一个组合框的组合框
- javascript - 浏览器开发工具中显示的用户详细信息
- magento2.2 - 自定义样式未转移到 magento 2.2 中的缓存文件夹