如图 我想拿 物理 化学 生物 去查询的话 同时含有这三个值的字段要出来,并且 只含有物理化学的,只含有物理的 也要出来 应该怎么做呢?
换一种说法 我三个参数是 3、7 、8 查询出来的结果 应该出现 例如 3, 7/3,8/7,3/7/8,8/3/7 但是不应该出现 3/6/8或者 3/7/9 这样的数据
from table where subj='物理' or subj='化学' or subj='物理/化学' or subj='物理/化学/生物'
select * from 表 t where t.subj like'%物理%' and t.subj like'%化学%' and t.subj like'%生物%'
union all
select * from 表 t where t.subj='物理'
union all
select * from 表 t where length(t.subj)=5 and t.subj like'%物理%' and t.subj like'%化学%'
from table where subj like '%物理%' or subj like '%化学%' or subj like '%生物%'
如果是只含有化学和生物的不要在加一个条件
from table where (subj like '%物理%' or subj like '%化学%' or subj like '%生物%') AND subj <>'化学' and subj <>'生物'
xxx是其他条件
where xxxxx=xxx and ( subj like '%物理%' or subj like '%化学%' or subj like '%生物%')
写个完整的
select * from table where CONCAT('物理','/',‘生物’,'/'‘化学’) like CONCAT('%',subj,'%')
or CONCAT('物理','/',‘化学’,'/'‘生物’) like CONCAT('%',subj,'%')
or CONCAT('化学','/',‘物理’,'/'‘生物’) like CONCAT('%',subj,'%')
or CONCAT('化学','/',‘生物’,'/'‘物理’) like CONCAT('%',subj,'%')
or CONCAT('生物','/',‘化学’,'/'‘物理’) like CONCAT('%',subj,'%')
or CONCAT('生物','/',‘物理’,'/'‘化学’) like CONCAT('%',subj,'%')
对应的需不需要单独的物理生物的条件你自己加就可以了,采用的mysql写法
没太懂你的组合规则,如果三个参数是 3、7 、8 查询出来的结果 应该出现 例如 3, 7/3,8/7,3/7/8,8/3/7。你自己将传递进来的三个参数组合一下当成条件查询啊
select * from TB where TB where subj
like '%物理%化学%生物%' or '%物理%生物%化学%'
or '%生物%物理%化学%' or '%生物%化学%物理%'
or '%化学%生物%物理%' or '%化学%物理%生物%'
or = '化学/物理' or = '物理/化学'
or = '物理'
这个字段看上去不像是索引列;所以不必考虑索引了。
如果只有三个参数 那就穷举吧
select * from TB where TB where subj in (
'物理', '化学', '生物',
'物理/化学', '物理/生物', '化学/物理', '化学/生物', '生物/物理', '生物/化学',
'物理/化学/生物', '物理/生物/化学', '化学/物理/生物', '化学/生物/物理', '生物/物理/化学', '生物/化学/物理'
)
如果后面涉及到更多的参数,in中的参数可以动态生成,当然用in效率不会太好
查询条件做一个循环拼接,然后直接查询:
select * from t_test where replace(replace(replace(replace(subj,"化学",""),"生物",""),"物理",""),"/","") = "";
解决思路:待查询字段一定是,由给定参数各种组合,所以循环所有查询条件+分隔符用空格替换处理,最终一定是一个空格,满足条件
这个问题很好,我觉得和楼上有一位的想法一样用,用穷举
select * from TB where TB where subj in (
'物理', '化学', '生物',
'物理/化学', '物理/生物', '化学/物理', '化学/生物', '生物/物理', '生物/化学',
'物理/化学/生物', '物理/生物/化学', '化学/物理/生物', '化学/生物/物理', '生物/物理/化学', '生物/化学/物理'
)
a = '物理';
b= '化学';
c= '生物';
stringBuffer sb = new StringBuffer(" select * from 表 ");
string aaa = new String();
if(){
for(){
aaa = a+','+b+','+c+','+a+'/'+b+'/'+c','+..................
}
sb.append(" where subj in ('"+aaa+"')");
}
楼主:
如果是在程序中使用的话可以将入参处理一下;
如果只是在SQLServer中使用的话可以写一个函数来处理;
当然在程序中使用也可以在SQLServer写个存储过程来执行,只是服务器最好只做增删改,将其他工作放在应用程序中处理。
楼主是在哪里应用呢?