gpt4 book ai didi

sql - 是否可以查询特定值的逗号分隔列?

转载 作者:行者123 更新时间:2023-12-04 14:10:30 27 4
gpt4 key购买 nike

我有(并且不拥有,所以我无法更改)一个布局与此类似的表格。

ID | CATEGORIES
---------------
1 | c1
2 | c2,c3
3 | c3,c2
4 | c3
5 | c4,c8,c5,c100

我需要返回包含特定类别 ID 的行。我首先使用 LIKE 语句编写查询,因为值可以在字符串中的任何位置
SELECT id FROM table WHERE categories LIKE '%c2%';将返回第 2 行和第 3 行
SELECT id FROM table WHERE categories LIKE '%c3%' and categories LIKE '%c2%';会再次让我得到第 2 行和第 3 行,但不会得到第 4 行
SELECT id FROM table WHERE categories LIKE '%c3%' or categories LIKE '%c2%';将再次让我获得第 2、3 和 4 行

我不喜欢所有的 LIKE声明。我找到了 FIND_IN_SET()在 Oracle 文档中,但它似乎在 10g 中不起作用。我收到以下错误:
ORA-00904: "FIND_IN_SET": invalid identifier
00904. 00000 - "%s: invalid identifier"

运行此查询时: SELECT id FROM table WHERE FIND_IN_SET('c2', categories); (来自文档的示例)或此查询: SELECT id FROM table WHERE FIND_IN_SET('c2', categories) <> 0; (来自谷歌的例子)

我希望它返回第 2 行和第 3 行。

有没有更好的方法来编写这些查询而不是使用大量 LIKE声明?

最佳答案

你可以,使用 LIKE。您不想匹配部分值,因此您必须在搜索中包含逗号。这也意味着您必须提供一个额外的逗号来搜索文本开头或结尾的值:

select 
*
from
YourTable
where
',' || CommaSeparatedValueColumn || ',' LIKE '%,SearchValue,%'

但是这个查询会很慢,所有使用 LIKE 的查询都会很慢,尤其是使用前导通配符时。

而且总是有风险。如果值周围有空格,或者值本身可以包含逗号,在这种情况下它们被引号包围(如在 csv 文件中),则此查询将不起作用,您将不得不添加更多逻辑,从而减慢查询速度更。

更好的解决方案是为这些类别添加一个子表。或者甚至是一个单独的类别表,以及一个将它们交叉链接到 YourTable 的表。

关于sql - 是否可以查询特定值的逗号分隔列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7212282/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com