100分求助,两张表通过3个字段比较,相同和不相同的分别挑出来

coolboy001 2009-12-09 07:11:38
请教,VF9.0
有2张表
表a 有主要字段 学号,姓名,身份证号
表bb 有主要字段 xh,xm,sfzh
(1)想把两张表里所有学号姓名身份证号都相同的给筛选出来进入表1
(2)然后把不相同的筛选出来进入表2
(1)select a.*,bb.* from a,bb where ALLTRIM(a.姓名)=ALLTRIM(bb.xm) and ALLTRIM(a.学号)=ALLTRIM(bb.xh) and ALLTRIM(a.身份证号)=ALLTRIM(bb.sfzh)
感觉身份证是空的 也晒出来了

(2)select a.*,bb.* from a,bb where not (ALLTRIM(a.姓名)=ALLTRIM(bb.xm) and LLTRIM(a.学号)=ALLTRIM(bb.xh) and ALLTRIM(a.身份证号)=ALLTRIM (bb.sfzh))

请问哪里错了呢?第2条语句就是没显示 ?
...全文
183 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
WWWWA 2009-12-10
  • 打赏
  • 举报
回复
1、加入对空SFZH的判断;
2、要用LEFT JOIN来得到结果,而不能用内连接。
xilaianzxsc 2009-12-10
  • 打赏
  • 举报
回复
学习中
wwwwb 2009-12-10
  • 打赏
  • 举报
回复
[Quote=引用楼主 coolboy001 的回复:]
请教,VF9.0
有2张表
表a  有主要字段 学号,姓名,身份证号
表bb 有主要字段 xh,xm,sfzh
(1)想把两张表里所有学号姓名身份证号都相同的给筛选出来进入表1
(2)然后把不相同的筛选出来进入表2
(1)select a.*,bb.* from a,bb where ALLTRIM(a.姓名)=ALLTRIM(bb.xm) and ALLTRIM(a.学号)=ALLTRIM(bb.xh) and ALLTRIM(a.身份证号)=ALLTRIM(bb.sfzh)
感觉身份证是空的 也晒出来了

(2)select a.*,bb.* from a,bb where not (ALLTRIM(a.姓名)=ALLTRIM(bb.xm) and LLTRIM(a.学号)=ALLTRIM(bb.xh) and ALLTRIM(a.身份证号)=ALLTRIM (bb.sfzh))

请问哪里错了呢?第2条语句就是没显示 ?

[/Quote]

1、加个条件
AND LEN(ALLT(a.身份证号))>=1
2、
你要达到什么目的?

不相同的筛选出来进入表2
select a.*,bb.* from a left join bb on ALLTRIM(a.姓名)=ALLTRIM(bb.xm) and ALLTRIM(a.学号)=ALLTRIM(bb.xh) and ALLTRIM(a.身份证号)=ALLTRIM(bb.sfzh) AND LEN(ALLT(a.身份证号))>=1
where bb.xh is null
jinjazzli 2009-12-09
  • 打赏
  • 举报
回复
第一个,可以在最后,加个 and sfzh!=' '

第二个,觉得至少应该明确有一个字段是相同的。否则不好搞
coolboy001 2009-12-09
  • 打赏
  • 举报
回复
也不行,也提示SQL:error correlating fileds
ACMAIN_CHM 2009-12-09
  • 打赏
  • 举报
回复
select *
from a
where not exists (select 1 from bb where ALLTRIM(a.姓名)==ALLTRIM(bb.xm) and ALLTRIM(a.学号)==ALLTRIM(bb.xh) and ALLTRIM(a.身份证号)==ALLTRIM(bb.sfzh))

单独这个可以吗?
coolboy001 2009-12-09
  • 打赏
  • 举报
回复
另外我用的是VF 9.0,select 1 from ,这个1是什么意思啊
coolboy001 2009-12-09
  • 打赏
  • 举报
回复
老大:
用你第2条语句,提示SQL错误,是全部选上一次执行么?
SQL:error correlating fileds
ACMAIN_CHM 2009-12-09
  • 打赏
  • 举报
回复
(1)

select a.*,bb.* from a,bb where ALLTRIM(a.姓名)==ALLTRIM(bb.xm) and ALLTRIM(a.学号)==ALLTRIM(bb.xh) and ALLTRIM(a.身份证号)==ALLTRIM(bb.sfzh)

改= 为 ==


(2)

select *
from a
where not exists (select 1 from bb where ALLTRIM(a.姓名)==ALLTRIM(bb.xm) and ALLTRIM(a.学号)==ALLTRIM(bb.xh) and ALLTRIM(a.身份证号)==ALLTRIM(bb.sfzh))
union all
select *
from bb
where not exists (select 1 from bb where ALLTRIM(a.姓名)==ALLTRIM(bb.xm) and ALLTRIM(a.学号)==ALLTRIM(bb.xh) and ALLTRIM(a.身份证号)==ALLTRIM(bb.sfzh))
ACMAIN_CHM 2009-12-09
  • 打赏
  • 举报
回复
(2)然后把不相同的筛选出来进入表2
(2)select a.*,bb.* from a,bb where not (ALLTRIM(a.姓名)=ALLTRIM(bb.xm) and ALLTRIM(a.学号)=ALLTRIM(bb.xh) and ALLTRIM(a.身份证号)=ALLTRIM (bb.sfzh))

请问哪里错了呢?第2条语句就是没显示 ?

是不是少了个A
另外这种写法也不对,会把所有记录都列出来。

建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html

1. 你的 create table xxx .. 语句
2. 你的 insert into xxx ... 语句
3. 结果是什么样,(并给以简单的算法描述)
4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)

这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试。

ACMAIN_CHM 2009-12-09
  • 打赏
  • 举报
回复
(1)想把两张表里所有学号姓名身份证号都相同的给筛选出来进入表1
(1)select a.*,bb.* from a,bb where ALLTRIM(a.姓名)=ALLTRIM(bb.xm) and ALLTRIM(a.学号)=ALLTRIM(bb.xh) and ALLTRIM(a.身份证号)=ALLTRIM(bb.sfzh)
感觉身份证是空的 也晒出来了

应该不会啊,是不是两个表中 身份证 都是空的?

2,749

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧