我有一些数据,其中包含一个逗号分隔的列表和三列。我想找到的是列表中存在的值,而不是任何列中的值。
数据:
+-------+-------+--------+-----------------+
| 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
价值观?我在这里做的事情真的很难衡量,感觉相当尴尬和脆弱。
这是一把小提琴。
暂无答案!
目前还没有任何答案,快来回答吧!