请教下sql能不能实现这样的查询?
我表里有一个关键字段 name,name值是用逗号拼接成的。
查询name是否包含数组元素的一个,包含任意一个就返回true。
比如
给一个数组[2,3],name的值都包含2或者3,返回全部
给一个数组[4,5],只有最后一条满足,就返回最后一条
注:不准用循环,只允许查询后面加条件
你看这样能不能满足你
1.先创建一个字符串分割函数 参考 https://blog.csdn.net/Heandme/article/details/83144361
select * from table where (','+name+',') like '%,2,%' or (','+name+',') like '%,3,%'
select * from table where (','+name+',') like '%,4,%' or (','+name+',') like '%,5,%'
看看这个语句是否能够满足要求
至于具体的sql条件,动态的根据条件生成即可
我之前也是这样想过,但是不满足,因为我后面给的数组是不确定的
@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]+",%' ":
}
}
mysql 有个函数可以直接用 find_in_set(id,name) name有id就true