2张表
t1 人员基础信息表 id唯一
id     name
1111   偶尔
2222   里t2 人员证书表 id+type唯一
id    type(证书类型)   paper
1111   1           证书名称1
1111   2           证书名称2
2222   3           证书名3
2222   1          证书名4我的查询页面有一个查询条件是,证书,现在是勾选的复选框,可以选择证书类型作为条件,
目前我是把这个条件,有勾选的 证书类型 编号组成一个用逗号隔开的字符串  
例如“1,2”查询同时拥有1,2类型证书的人员
 “1,2,3”查询同时拥有1,2,3类型证书的人员?
这样的sql条件要如何写呢?另外我查询出的结果列表要,要显示全部证书?这又如何写呢?
id        name       paper
1111      偶尔     证书名称1,证书名称2
2222      里       证书名3,证书名4

解决方案 »

  1.   

    select t1.id,t1.name,
      wm_concat(t2.paper) paper
    from t1,t2
    where t1.id=t2.id
      

  2.   

    group by t1.id您巨牛逼啊~~~~
    我的查询页面有一个查询条件是,证书,现在是勾选的复选框,可以选择证书类型作为条件,
    目前我是把这个条件,有勾选的 证书类型 编号组成一个用逗号隔开的字符串   
    例如“1,2”查询同时拥有1,2类型证书的人员
     “1,2,3”查询同时拥有1,2,3类型证书的人员?
    这样的sql条件要如何写呢?这个要如何整呢?
      

  3.   

    select a.id,a.name,wm_concat(b.paper)
    from t1 a,(select id,type,paper,count(*) over(partition by id) rn from t2) b
    where a.id=b.id and rn>=2
    group by a.id,a.name
      

  4.   

    你要在c#或者java里拼接一个查询sql,例如:string str="1,3";
                
                 string sqlstr="select * from t1 where t1.id in (select id from t2 where type in ("+str +
                     ") group by id having count(1) = ceil(length('"+str+ "') / 2))";
      

  5.   


    字符串我已经拼好了,传到后台的参数就是字符串“1,2,3”这样
    就是不知道怎么写sql例如“1,2”查询同时拥有1,2类型证书的人员
     “1,2,3”查询同时拥有1,2,3类型证书的人员?
      

  6.   

    字符串我已经拼好了,传到后台的参数就是字符串“1,2,3”这样
    就是不知道怎么写sql
    ---------------------------------
    我给你的sql是完成你的第一个问题,你是要一步完成到第二个问题?
      

  7.   

    一步到位的话这样写string str="1,3";            string sqlstr = "select t1.id,t1.name,wm_concat(t2.paper)paper from t1,t2 where t1.id=t2.id and "+
                    "t2.type in (" + str + ") and t1.id in (select id from t2 where type in (" + str +
                     ") group by id having count(1) = ceil(length('" + str + "') / 2)) group by t1.id ,t1.name";输出一下你拼接后的sql字符串,看看能不能在窗口中执行查询。
      

  8.   

    select id
      from t2
     where cert_type in (01, 02, 05)
     group by id
    having count(1) = ceil(length('01,02,05') / 2)t2 人员证书表 id+type唯一
    id type(证书类型) paper
    1111 01 证书名称1
    1111 02 证书名称2
    1111 05 证书名3数据库里有上面这样3条记录的
    这样的sql是不是该查出 1111 这条呢?
    可是我在数据库里查不出来
      

  9.   

    哦 你type你字符类型的啊,那得改一下了。
      

  10.   

    如果你是在选择了之后点击查询,想先把结果插入到一个表,可以写一个存储过程实现,如果只是拼接sql查询的话,可能比较麻烦了。
      

  11.   

    发帖发重了吧!好像另一个帖子看见了。
    一个用交集或计数。
    一个用vm_concat.
      

  12.   

    having count(1)
    其实一开始我不懂 这个是干嘛的