gpt4 book ai didi

sql - sqlite 中与 MySQL 中的 find_in_set(value,set) 等效的函数是什么?

转载 作者:行者123 更新时间:2023-12-03 17:41:05 27 4
gpt4 key购买 nike

下面的例子是 w.r.t MySQL。例如:test1如下

+----+------------------------+
| id | name |
+----+------------------------+
| 2 | 1,2 |
| 33 | 2,44,33,5 |
| 1 | 11,4,55 |
| 12 | 11,111,122,551,112,221 |
+----+------------------------+

选择*来自 test1其中 find_in_set('122',name)

将 o/p 以下内容:

+----+------------------------+
| id | name |
+----+------------------------+
| 12 | 11,111,122,551,112,221 |
+----+------------------------+

在 Sql Lite 中,使用方式如下:

select * 
from `test1`
where name like '%,122,%'
or name like '122,%'
or name like '%,122'
or name = '122'

A case:

我的值为 551,122。在这种情况下,当值从 appln 返回时,我们可以拆分值列并将查询写为

(',' || column_name || ',') LIKE '%,551,%' or
(',' || column_name || ',') LIKE '%,122,%'

有什么最好的办法来处理这个问题吗?

我想避免喜欢。那么还有其他想法吗?

最佳答案

我的第一个想法是,您不应该将 CSV 数据存储在关系数据库的列中,您应该使用单独的关联表。

不过,您可以使用 LIKE 来完成这项工作。您的评论表明您看到了三种情况,但实际上有四种情况:

select *
from test1
where name like '122,%'
or name like '%,122'
or name like '%,122,%'
or name = '122' /* You forgot about this degenerate case */

索引可用于最后一种情况,也可能用于第一种情况,但中间两种情况可能是表扫描。如果您强制数据始终具有前导和尾随逗号,则可以简化查询:

+----+--------------------------+
| id | name |
+----+--------------------------+
| 2 | ,1,2, |
| 33 | ,2,44,33,5, |
| 1 | ,11,4,55, |
| 12 | ,11,111,122,551,112,221, |
+----+--------------------------+

然后你可以只使用一个 LIKE(不会使用索引):

select *
from test1
where name like '%,122,%'

但您确实应该使用关联表,这样您就可以使用 where name = 122 并为其余部分连接到其他表。

关于sql - sqlite 中与 MySQL 中的 find_in_set(value,set) 等效的函数是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7926020/

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