现有两个表,一个是录取库,称为 lqk_table,另一个是学籍信息表:xj_table,
学籍表是录取库的一个子集,他们都有字段ksh,xm,rxnf,yxmc, cc这几个字段,现在要审核学籍表,要求找出那些ksh,xm,rxnf,yxmc, cc这几个字段与录取库lqk_table中的着几个字段值不完全相同的记录,最后生成的结果要求生成审核未通过的原因,即是哪个字段错了!
请各位高手指点一下。

解决方案 »

  1.   

    select ksh,xm,rxnf,yxmc, cc from xj_table 
    minus
    select ksh,xm,rxnf,yxmc, cc from xj_table a,lqk_table b Where a.ksh=b.ksh
    and a.xm=b.xm and a.rxnf=b.rxnf and a.yxmc=b.yxmc and a.cc=b.cc
      

  2.   

    可能要写存储过程实现了首先选出两个表中值不同的记录,将这两个表其中的一个表中的记录(筛选后的)放入一个cursor.遍历cursor每一条记录,然后通过唯一主键(可能是ksh)的关联与另一个表中的记录(也是筛选后的)匹配,找到相同的ksh的记录后把该记录(可以考虑用rowtype类型的对象存储)所有的字段值取出来与cursor中该条记录的字段值一一进行判断匹配,字段值不同的便放入一个变量中进行临时存储,等所有的字段值判断完成后边作为第六个字段值和前面几个字段值一起作为记录行插入到另外一张表(new_table)中.然后要查生成审核未通过的原因的话就到new_table中select出最后一个字段值就好了.不知道我理解的是不是LZ的意思,这种方法如果数据量达的话就.. 希望有更好的方法。
      

  3.   

    谢谢各位的意见,jiffer说的语句我试过了,但我们用的是kingbase数据库,不支持minus运算,得不到正确结果。
    mantisXF,我还不会写存储过程。
    shan1119说设置主键的意见倒是可行,那样处理起来可能会简单一些。谢谢各位了!
      

  4.   

    select * from xj_table where rowid not in (
    select xj.rowid
      from xj_table xj, lqk_table lqk
     where xj.ksh = lqk.ksh
       and xj.xm =lqk.xm
       and xj.rxnf=lqk.rxnf
       and xj.yxmc=lqk.yxmc
       and xj.cc=lqk.cc)
    不知道这样行不?
      

  5.   

    不是oracle啊,晕倒!我的不行了!
      

  6.   

    select * 
    from xj_table
    where convert(varchar(50),ksh)+convert(varchar(50),xm)+convert(varchar(50),rxnf)+convert(varchar(50),yxmc)+convert(varchar(50),cc) not in
    (
    select convert(varchar(50),a.ksh)+convert(varchar(50),a.xm)+convert(varchar(50),a.rxnf)+convert(varchar(50),a.yxmc)+convert(varchar(50),a.cc)
    from lqk_table a,xj_table b
    where convert(varchar(50),a.ksh)+convert(varchar(50),a.xm)+convert(varchar(50),a.rxnf)+convert(varchar(50),a.yxmc)+convert(varchar(50),a.cc)=
          convert(varchar(50),b.ksh)+convert(varchar(50),b.xm)+convert(varchar(50),b.rxnf)+convert(varchar(50),a.yxmc)+convert(varchar(50),b.cc)
    )
      

  7.   

    试试看这个
    select xj_table.*
      from xj_table, lqk_table
     where xj_table.ksh = lqk_table.ksh(+)
       and xj_table.xm = lqk_table.xm(+)
       and xj_table.rxnf = lqk_table.rxnf(+)
       and xj_table.yxmc = lqk_table.yxmc(+)
       and xj_table.cc = lqk_table.cc(+)
       and lqk_table.PK is null
    注:lqk_table.PK 也可以用lqk_table表中,不允许为空的字段代替
      

  8.   

    谢谢各位了!InFerNaL_LioN(InFerNaL_LioN) 与a2krh() 的语句都很好。知识效率慢些, 例如审核4000条记录需要五六分钟的时间,太慢了。不知道还有没有什么方法可以加快在数据库中的查找效率,除了索引之外?