日期:2014-05-17  浏览次数:21102 次

求一sql语句(想了三天的问题)
现有两个表,一个是录取库,称为   lqk_table,另一个是学籍信息表:xj_table,
学籍表是录取库的一个子集,他们都有字段ksh,xm,rxnf,yxmc,   cc这几个字段,现在要审核学籍表,要求找出那些ksh,xm,rxnf,yxmc,   cc这几个字段与录取库lqk_table中的着几个字段值不完全相同的记录,最后生成的结果要求生成审核未通过的原因,即是哪个字段错了!


请各位高手指点一下。

------解决方案--------------------
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
------解决方案--------------------
可能要写存储过程实现了

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

不知道我理解的是不是LZ的意思,这种方法如果数据量达的话就.. 希望有更好的方法。

------解决方案--------------------
条件中必须得有主键,所以得知道主键,要是主键都对不上,那估计就难了.
------解决方案--------------------
帮顶,关注中~~~

------解决方案--------------------
关注中
------解决方案--------------------
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)


不知道这样行不?
------解决方案--------------------
不是oracle啊,晕倒!我的不行了!
------解决方案--------------------
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)
)
------解决方案--------------------
试试看这个
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表中,不允许为空的字段代替