| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4705 人关注过本帖
标题:表连接时如何比较多列数据
只看楼主 加入收藏
ycvf
Rank: 2
等 级:论坛游民
帖 子:210
专家分:56
注 册:2012-8-25
结帖率:75.61%
收藏
已结贴  问题点数:20 回复次数:20 
表连接时如何比较多列数据
正在学SQL语句,遇到以下问题
要在两表中筛选出身份证或姓名不同的数据,也就是两个表的姓名或身份证任何一个不符的就筛选出来,即使姓名和身份证相同,如果在两表中的班级不同,也筛选出来。
用以下命令提示错误?
sele a.姓名,a.身份证,a.班级,b.姓名,b,班级,b.身份证 from e:/a/一表.dbf a where 身份证 not in(sele  身份证 from e:/a/二表 b)
附件:
a.zip (981 Bytes)
搜索更多相关主题的帖子: 连接 比较 数据 身份证 姓名 
2017-11-28 12:43
ycvf
Rank: 2
等 级:论坛游民
帖 子:210
专家分:56
注 册:2012-8-25
收藏
得分:0 
如果相同姓名和身份证号相同,但是在两表中班级不同,也筛选出来。

落花人独立,微雨燕双飞。
2017-11-28 12:50
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:0 
最好这样
use e:\a\一表.dbf in 0
use e:\a\二表.dbf in 0
sele a.姓名,a.身份证,a.班级,b.姓名,b,班级,b.身份证 from 一表 a where a.身份证 not in(sele  身份证 from 二表 b)
2017-11-28 13:36
ycvf
Rank: 2
等 级:论坛游民
帖 子:210
专家分:56
注 册:2012-8-25
收藏
得分:0 
楼上是以身份证为条件的查询。如果有一表或二表中有两个相同的身份证号,还有同名同姓的,那结果也不一样吧。
那班级不同其它列的值都相同的怎么筛选出来?

落花人独立,微雨燕双飞。
2017-11-28 13:48
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:10 
SELECT T1.姓名 AS 一表姓名,T1.身份证 AS 一表身份证,T1.班级 AS 一表班级,T2.姓名 AS 二表姓名,T2.身份证 AS 二表身份证,T2.班级 AS 二表班级 ;
  FROM 一表 AS T1, 二表 AS T2 ;
  WHERE (ALLTRIM(T1.姓名)==ALLTRIM(T2.姓名) AND ALLTRIM(T1.身份证)<>ALLTRIM(T2.身份证)) OR ;
     (ALLTRIM(T1.姓名)<>ALLTRIM(T2.姓名) AND ALLTRIM(T1.身份证)==ALLTRIM(T2.身份证)) OR ;
     (ALLTRIM(T1.姓名-T1.身份证)==ALLTRIM(T2.姓名-T2.身份证) AND ALLTRIM(T1.班级)<>ALLTRIM(T2.班级))
2017-11-28 15:14
ycvf
Rank: 2
等 级:论坛游民
帖 子:210
专家分:56
注 册:2012-8-25
收藏
得分:0 
我的思路是以表一为主表和表2比较,各字段用首字母表示。
sele a.xm,a.sfz,b.xm,b.sfz from 表1 a left join 表2 b on a.xm=b.xm and a.bj=b.bj incur table B  
然后不匹配的字段值为NULL,提取出值为NULL的记录(不知道怎么提取?)
然后再以姓名和班级再次左连接,同时提取出值为NULL的记录。
不知道对吗?


落花人独立,微雨燕双飞。
2017-11-28 18:19
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9848
专家分:27241
注 册:2012-2-5
收藏
得分:0 
如果没有相同的正确的关键字段是没办法比较的,除非两表相同记录的RECNO()相同。

坚守VFP最后的阵地
2017-11-28 18:20
ycvf
Rank: 2
等 级:论坛游民
帖 子:210
专家分:56
注 册:2012-8-25
收藏
得分:0 
目的是找出两表的不同,然后显示出表2与表1不同的记录,如果姓名和身份证相同,怎么判断在两个表中要否班级有变化?

落花人独立,微雨燕双飞。
2017-11-28 18:24
ycvf
Rank: 2
等 级:论坛游民
帖 子:210
专家分:56
注 册:2012-8-25
收藏
得分:0 
以下是引用taifu945在2017-11-28 15:14:53的发言:

SELECT T1.姓名 AS 一表姓名,T1.身份证 AS 一表身份证,T1.班级 AS 一表班级,T2.姓名 AS 二表姓名,T2.身份证 AS 二表身份证,T2.班级 AS 二表班级 ;
  FROM 一表 AS T1, 二表 AS T2 ;
  WHERE (ALLTRIM(T1.姓名)==ALLTRIM(T2.姓名) AND ALLTRIM(T1.身份证)<>ALLTRIM(T2.身份证)) OR ;
     (ALLTRIM(T1.姓名)<>ALLTRIM(T2.姓名) AND ALLTRIM(T1.身份证)==ALLTRIM(T2.身份证)) OR ;
     (ALLTRIM(T1.姓名-T1.身份证)==ALLTRIM(T2.姓名-T2.身份证) AND ALLTRIM(T1.班级)<>ALLTRIM(T2.班级))

T1.姓名-T1.身份证 中间在符号什么意思?

落花人独立,微雨燕双飞。
2017-11-28 18:27
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9848
专家分:27241
注 册:2012-2-5
收藏
得分:5 
要想判断两表同一条记录相同字段的不同值,只有两表中的同一条记录RECNO()相同,否则无法精确判断。

坚守VFP最后的阵地
2017-11-28 18:27
快速回复:表连接时如何比较多列数据
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024494 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved