首页新闻找找看学习计划

SQL条件问题

0
悬赏园豆:20 [已解决问题] 解决于 2019-06-14 08:58

请教下sql能不能实现这样的查询?
我表里有一个关键字段 name,name值是用逗号拼接成的。
查询name是否包含数组元素的一个,包含任意一个就返回true。
比如

给一个数组[2,3],name的值都包含2或者3,返回全部
给一个数组[4,5],只有最后一条满足,就返回最后一条
注:不准用循环,只允许查询后面加条件

SQL
Mr·林的主页 Mr·林 | 菜鸟二级 | 园豆:201
提问于:2019-06-13 17:27
< >
分享
最佳答案
0

你看这样能不能满足你
1.先创建一个字符串分割函数 参考 https://blog.csdn.net/Heandme/article/details/83144361

  1. 你需要吧你的数组拼接成 类似这种的字符串 '4,5'
    SQL如下 在 F_Split( ’拼接好的字符串‘ ,‘分隔符’ )
    SELECT * FROM tba WHERE
    EXISTS( SELECT COL FROM F_Split('4,5',',') WHERE CHARINDEX(COL,name)<>0 )
收获园豆:15
CaiJuHao | 菜鸟二级 |园豆:323 | 2019-06-13 22:15
其他回答(2)
0

select * from table where (','+name+',') like '%,2,%' or (','+name+',') like '%,3,%'
select * from table where (','+name+',') like '%,4,%' or (','+name+',') like '%,5,%'
看看这个语句是否能够满足要求
至于具体的sql条件,动态的根据条件生成即可

收获园豆:5
猴子哥 | 园豆:632 (小虾三级) | 2019-06-13 18:21

我之前也是这样想过,但是不满足,因为我后面给的数组是不确定的

支持(0) 反对(0) Mr·林 | 园豆:201 (菜鸟二级) | 2019-06-13 18:35

@Mr·林: 我知道数据不确认啊,就是根据数组的真是情况动态拼接where语句啊,这个逻辑很简单吧
实在不行,就直接用for循环数组,并语句就是了啊
比如:我不知道你使用的什么语言,我写点伪代码吧
///// 假设数组为 arry
string sql="select * from table ";
if(arry不为空 && arry长度>0){
for(int i=0 ;i<arry长度;i++)
{
sql+=(i>0:"or":"") +"(','+name+',') like '%,"+arry[i]+",%' ":
}
}

支持(0) 反对(0) 猴子哥 | 园豆:632 (小虾三级) | 2019-06-13 21:19
0

mysql 有个函数可以直接用 find_in_set(id,name) name有id就true

hfl~ | 园豆:223 (菜鸟二级) | 2019-06-18 11:03
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册