SQL 三个参数匹配一个字段查询应该如何做呢?

图片说明
如图 我想拿 物理 化学 生物 去查询的话 同时含有这三个值的字段要出来,并且 只含有物理化学的,只含有物理的 也要出来 应该怎么做呢?

换一种说法 我三个参数是 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写个存储过程来执行,只是服务器最好只做增删改,将其他工作放在应用程序中处理。

楼主是在哪里应用呢?