我有结构表
id| list (VARCHAR)
--|-------
1 | a, b, c
2 | b, c, d
3 | a
我想在逗号分隔列表中使用单个值作为其他查询中的过滤器。 我以为我会通过像
这样的查询来实现这一点SELECT * FROM A WHERE column1 IN (SELECT list FROM B WHERE id = 1)
但这样我使用了值
a, b, c
作为过滤器而不是,例如,
a
我需要作为过滤器。
我怎样才能做到这一点?
答案 0 :(得分:2)
一种方法是使用find_in_set()
或like
。这是一个例子:
SELECT *
FROM A a JOIN
B b
ON b.id = 1 and
find_in_set(a.column1, replace(list, ', ', ',')) > 0;
答案 1 :(得分:1)
如果您想要列表中的第一个值,那么您可以这样做。
SELECT *
FROM A
WHERE column1 IN
(
SELECT
SUBSTRING_INDEX(`list`, ',', 1)
FROM B
WHERE id = 1
)
您可以通过更改SUBSTRING_INDEX()中的数字来获取字符串的任何部分..
SUBSTRING_INDEX(`list`, ',', 1) -- find first comma and return first part
SUBSTRING_INDEX(`list`, ',', -1) -- find last comma and return last part
SUBSTRING_INDEX(`list`, ',', -2) -- find second to last comma and return last part
SUBSTRING_INDEX(`list`, ',', 2) -- find second to first comma and return first part
.... etc