我的categories
表格中有一列company
。在categories
中,可以有多个由,
分隔的类别。像1,2,3,4,5
这样的东西,我知道其中一个类别id
。
现在让我们说1
。
那我怎么能查询company
表?
答案 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有arrays和array 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,应该返回acme
和abc
。