从列中的逗号分隔值搜索

时间:2015-06-11 12:45:52

标签: sql postgresql doctrine-orm doctrine

我有一个包含2列的表格 - idpets

宠物栏包含由[逗号]分隔的缩写宠物名称,如下所示

+----+-------------+
| id | pets        |
+----+-------------+
| 1  | CAT,DOG     |
+----+-------------+
| 2  | CAT,DOG,TIG |
+----+-------------+
| 3  | ZEB,MOU     |
+----+-------------+

现在我要列出宠物= CAT的所有id,同样所有id都是宠物= DOG等等

我最初的尝试是为每个PET(CAT,DOG等)运行以下SQL

select id
from "favpets"
where pets like '%CAT%'

这个简单解决方案的局限性在于实际表格没有。宠物并不像上面提到的那么简单。

没有。这样的宠物超过200.因此,必须执行200个sql才能列出对应宠物的所有id

有没有好的替代解决方案?我正在使用学说,所以学说提供了什么好的实现?

1 个答案:

答案 0 :(得分:1)

通过此查询,您将获得所有id,所有宠物,按宠物订购:

SELECT id, unnest(string_to_array(pets, ',')) AS mypet
FROM favpets
ORDER BY mypet;

使用它作为子查询,它将变得容易分组和计数:

SELECT mypet, COUNT(*) FROM
(
    SELECT id, unnest(string_to_array(pets, ',')) AS mypet
    FROM favpets
    ORDER BY mypet
) AS a
GROUP BY mypet;