正在学SQL语句,遇到以下问题
要在两表中筛选出身份证或姓名不同的数据,也就是两个表的姓名或身份证任何一个不符的就筛选出来,即使姓名和身份证相同,如果在两表中的班级不同,也筛选出来。
用以下命令提示错误?
sele a.姓名,a.身份证,a.班级,b.姓名,b,班级,b.身份证 from e:/a/一表.dbf a where 身份证 not in(sele身份证 from e:/a/二表 b)
附件:
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比较,各字段用首字母表示。
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的记录。
不知道对吗?
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.班级))