使用逗号分隔列表中的单个值作为参数

时间:2014-07-23 13:46:17

标签: mysql sql

我有结构表

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 

我需要作为过滤器。

我怎样才能做到这一点?

2 个答案:

答案 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