vf或者sql之中两个表如何提取不同的部分?

来源:百度知道 编辑:UC知道 时间:2024/05/26 12:46:10
select a.fgs,a.pq,a.dz,a.mn,a.mnz,a.szz,a.szf,a.kd,b.zzpq,b.ql from ys.dbf a,old.dbf b where a.dz=b.dz

以上命令是两个表对比,筛选出地址字段(dz)相同的记录。
现在我要做的是,筛选出地址字段不同的,就是在a表中存在的地址,但是b表之中不存在的,如何筛选。我把条件设置为a.dz<>b.dz,就错误了,出的记录数是非常恐怖的多!
是怎么回事?怎么改动?

错误的原因是:可以这样理解笨语句sql运行步骤:1。 用a表第一条记录去找b表第一条记录,如果dz不同,反馈到结果。2。用a表第一条记录去找b表第二条数据,如果dz不同,反馈到结果,如此循环,直到b表最后一条,然后a表条到下一条,继续循环。所以如果a表2条数据,b表三条数据,dz都不同的话,结果是:2*3=6条。你的误区在于:a表和b表除了dz外,缺少一个一一对应的主键。所以应该用 select a.* from ys.dbf where dz not in(select dz from old.dbf)