| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4660 人关注过本帖
标题:表连接时如何比较多列数据
只看楼主 加入收藏
ycvf
Rank: 2
等 级:论坛游民
帖 子:210
专家分:56
注 册:2012-8-25
收藏
得分:0 
以下是引用sdta在2017-11-28 18:27:36的发言:

要想判断两表同一条记录相同字段的不同值,只有两表中的同一条记录RECNO()相同,否则无法精确判断。

所以我尝试左连接两表,相同字段且值(身份证)相同的就在同一条记录,但是怎么判断是否是同一个班?

落花人独立,微雨燕双飞。
2017-11-28 18:48
ycvf
Rank: 2
等 级:论坛游民
帖 子:210
专家分:56
注 册:2012-8-25
收藏
得分:0 
提示语法错误
wher (a.xm-a.sfz=b.xm-b.sfz and a.bj!=b.bj)or (a.sfz=b.sfz and a.bj!=b.bj)

落花人独立,微雨燕双飞。
2017-11-28 19:20
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10608
专家分:43186
注 册:2014-5-20
收藏
得分:5 
    * 姓名相同,身份证或班级不同
SELECT 一表.姓名,一表.身份证,一表.班级, 二表.姓名,二表.身份证,二表.班级;
    FROM 一表 JOIN 二表 ON 一表.姓名=二表.姓名 AND 一表.身份证-一表.班级!=二表.身份证-二表.班级

    * 身份证相同,姓名或班级不同
SELECT 一表.姓名,一表.身份证,一表.班级, 二表.姓名,二表.身份证,二表.班级;
    FROM 一表 JOIN 二表 ON 一表.身份证=二表.身份证 AND 一表.姓名-一表.班级!=二表.姓名-二表.班级

    * 姓名、身份证和班级都相同
SELECT 一表.姓名,一表.身份证,一表.班级, 二表.姓名,二表.身份证,二表.班级;
    FROM 一表 JOIN 二表 ON 一表.姓名-一表.身份证-一表.班级=二表.姓名-二表.身份证-二表.班级
2017-11-28 20:39
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:0 
“-”是两个字符型数据的连接符号之一,还有一个是“+”。“+”、“-”号的区别是:前者为简单拼接;后者是拼接后,把第一个字符型数据尾部的所有空格移到结果数据的尾部。
2017-11-29 08:31
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.班级))

在数据很多的情况下,表2会显示很多重复记录。

落花人独立,微雨燕双飞。
2017-11-29 13:07
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.班级))

在数据很多的情况下,表2会显示很多重复记录。

落花人独立,微雨燕双飞。
2017-11-29 13:07
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
回复 楼主 ycvf
要想解决这个问题,上传完整文件,不一定非要用SQL命令

坚守VFP最后的阵地
2017-11-29 14:09
ycvf
Rank: 2
等 级:论坛游民
帖 子:210
专家分:56
注 册:2012-8-25
收藏
得分:0 
以下是引用吹水佬在2017-11-28 20:39:31的发言:

    * 姓名相同,身份证或班级不同
SELECT 一表.姓名,一表.身份证,一表.班级, 二表.姓名,二表.身份证,二表.班级;
    FROM 一表 JOIN 二表 ON 一表.姓名=二表.姓名 AND 一表.身份证-一表.班级!=二表.身份证-二表.班级

    * 身份证相同,姓名或班级不同
SELECT 一表.姓名,一表.身份证,一表.班级, 二表.姓名,二表.身份证,二表.班级;
    FROM 一表 JOIN 二表 ON 一表.身份证=二表.身份证 AND 一表.姓名-一表.班级!=二表.姓名-二表.班级

    * 姓名、身份证和班级都相同
SELECT 一表.姓名,一表.身份证,一表.班级, 二表.姓名,二表.身份证,二表.班级;
    FROM 一表 JOIN 二表 ON 一表.姓名-一表.身份证-一表.班级=二表.姓名-二表.身份证-二表.班级

on 后的条件 不能用!=,否则会报错。

落花人独立,微雨燕双飞。
2017-11-29 20:51
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10608
专家分:43186
注 册:2014-5-20
收藏
得分:0 
回复 18楼 ycvf
SELECT a.姓名,a.身份证,a.班级, b.姓名,b.身份证,b.班级;
    FROM 一表 a, 二表 b;
    WHERE a.姓名=b.姓名 AND a.身份证-a.班级!=b.身份证-b.班级

SELECT a.姓名,a.身份证,a.班级, b.姓名,b.身份证,b.班级;
    FROM 一表 a, 二表 b;
    WHERE a.身份证=b.身份证 AND a.姓名-a.班级!=b.姓名-b.班级
2017-11-29 21:23
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
楼主是眼高手低

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



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

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