针对逗号分隔列的SQL查询

时间:2014-10-14 15:34:55

标签: sql

我的categories表格中有一列company。在categories中,可以有多个由,分隔的类别。像1,2,3,4,5这样的东西,我知道其中一个类别id

现在让我们说1

那我怎么能查询company表?

3 个答案:

答案 0 :(得分:0)

你可以这样做:

SELECT * 
FROM company 
WHERE (categories like '%,categoryId,%' or categories like 'categoryId,%')

第二个喜欢的条款会照顾你的第一个没有先前昏迷的记录

答案 1 :(得分:0)

您必须处理四种情况:有问题的categories首先在列表中,列表内部,列表中的最后一个,以及唯一的类别:SELECT * FROM company WHERE categories LIKE '1,%' OR categories LIKE '%,1,%' OR categories LIKE '%,1' OR categories='1'

答案 2 :(得分:0)

PostgreSQL有arraysarray functions,可以让你巧妙地解决这个问题。

假设以下架构和示例数据:

CREATE TABLE company
    ("name" varchar(13), "categories" varchar(9));

INSERT INTO company
    ("name", "categories")

VALUES
    ('acme', '1,2,3,4,5'),
    ('abc', '2,3,4'),
    ('xyz', '3,5'),
    ('stackoverflow', '4');

然后你可以使用ANY运算符来查找数组中的元素,如下所示:

SELECT
    name

FROM (
    SELECT NAME, string_to_array(categories, ',') AS category_array FROM company
    ) n

WHERE
    '2' = ANY (category_array);

根据this SQLFiddle,应该返回acmeabc