表名称:config
涉及的列名:name、value
我的配置表的值列存储用逗号分隔的文本值,如下所示:text1、text2、text3等
我有一个包含 28 个可能存在于该列中的文本字符串的列表。我需要一个查询来报告列表中的哪些文本字符串不会出现在名称列包含“config_name”的行的值列中。
以下方法不起作用:
SELECT value
FROM config
WHERE NOT EXISTS (
SELECT value
FROM config
WHERE name = 'config_name'
and (value like '%text1%' or value like '%text2%' or value like '%text3%'));
将所有 28 个值放入表格中,例如
known_values
。然后使用 LEFT JOIN+NULL
模式查找 config
表中不匹配的所有行。
使用
FIND_IN_SET()
匹配逗号分隔列表中的值。
SELECT k.value
FROM known_values AS k
LEFT JOIN config AS c
ON c.name = 'config_name' AND FIND_IN_SET(k.value, c.value)
WHERE c.value IS NULL