学生表:ID,作者姓名,班级
论文表:ID,作者姓名,论文名称,杂志名称,通讯作者(有多个通讯作者写在一起的,都为学生表中人员)
如何用SQL查询某个班级(EDIT1.TEXT)所有作者姓名及通讯作者的所有论文数据

解决方案 »

  1.   

    select 论文表.* from 学生表,论文表
    where 学生表.班级=EDIT1.TEXT and 学生表.作者姓名=论文表.作者姓名
    不知道你的条件“所有作者姓名及通讯作者的所有论文数据”是不是上面的条件?如果必须和通讯作者一致,再加上一个“ and 学生表.作者姓名=论文表.通讯作者 ”
    大概是这样了,看看结果对不对
      

  2.   

    条件改成:
    Charindex(学生表.作者姓名,论文表.作者姓名,0)>0
      

  3.   

    select 论文表.* from 学生表,论文表
    where Charindex(EDIT1.TEXT,学生表.班级,0)>0  and 学生表.作者姓名=论文表.作者姓名  and Charindex(学生表.作者姓名,论文表.通讯作者,0)>0
    你试一试是不是这样
      

  4.   

    哦,我的数据库是SQl Server 2008 R2,不同的数据库可能判断子字符串的函数不同,仅提供思路参考吧
      

  5.   

    建议使用 like 语句。第一步,由学生表,获取“作者姓名”,比如“张三王四李二”
    每二步,将“张三王四李二”分解成单人名(如果你在保存数据时, 在每人个人名后加一个“,”字符,就更好分了)
            比如: S1,s2,s3分别保存分解的姓名
    第三步:使用Link的模糊搜索:
    'select * from 论文表 where (作者姓名 like '+#39+'%'+S1+'%'+#39+') or (通讯作者 like '+#39+'%'+S1+'%'+#39+') or '+
                              ' (作者姓名 like '+#39+'%'+S2+'%'+#39+') or (通讯作者 like '+#39+'%'+S2+'%'+#39+') or '+
                              ' (作者姓名 like '+#39+'%'+S3+'%'+#39+') or (通讯作者 like '+#39+'%'+S3+'%'+#39+') ';
      

  6.   

    用SQL查询某个班级(EDIT1.TEXT)所有作者姓名及通讯作者的所有论文数据,在不愿意重新整理数据的前提下,只能用游标了,根据提供的班级信息,把指定班级的姓名信息打个游标,逐个传入论文表,用楼上的SQL语句插入临时表(把S1用游标值替代掉,去掉S2,S3,最好在临时表加个查询的姓名字段显示,以方便后期过滤),应该可以解决.
      

  7.   

    用like就搞定
    select a.*,b.* from 论文表 a inner joing 学生表 b on a.作者姓名=b.作者姓名
    where a.通讯作者 like '%edit.text%'