回 帖 发 新 帖 刷新版面

主题:怎样查询a表某个字段的值不含有b表中某个字段的值

怎样查询a表某个字段的值不含有b表中某个字段的值
如:有两个vfp表,a表和b表,它们都有一个相同的字段“编号”,a.编号=b.编号,两个表中有很多记录,这里只略列几个记录,表结构如下:
                a表
编号    姓名    性别      科目等级        备注
001    张金标    男     计算机,五级    
002    王栋军    男     英语,六级    
003    刘艳梅    女     日语,五级    
004    张学浩    男     英语,八级    
005    吴昊      男     英语,一十级    
006    罗明      男     英语,八级    
007    马树康    男     俄语,四级   

                b表
编号    姓名    性别    科目     等级      备注
001    张金标    男     计算机   五级    
002    王栋军    男     英语     六级    
003    刘艳梅    女     日语     五级    
004    张学浩    男     日语     八级    
005    吴昊      男     英语     一十级    
006    罗明      男     英语     八级    
007    马树康    男     英语     四级   

请教老师:怎样查出a表“科目等级”字段值中不含有b表“科目”字段值的记录?如查找出以下记录:
编号    姓名    性别    科目     等级      备注
004    张学浩    男     日语     八级   
007    马树康    男     英语     四级   

我意思是查找出编号为004记录的原因是:在a表“科目等级”字段中,004号记录的值是“英语,八级”,而在b表“科目”字段中004号记录的值是“日语”,因为在“英语,八级”中不含有“日语”两个字,所以查找出004号记录;同样在007号记录中,因为在“俄语,四级”中不含有“英语”两个字,所以查找出007号记录。请教老师用什么方法可行,怎样才能实现,请给予详细指教,谢谢 急 急 急

回复列表 (共7个回复)

沙发

抱歉,因为你没有提供原表进行测试,所以只能盲打,未经调试。以下SQL从原理是可行的

Select * from a表 where 科目等级 not in (select trim(科目)+","+trim("等级) as 科目等级 from b表)


这个是原理,实际运行VFP存在一些问题:如果第一个数据的科目+等级比较短,那么这个字段的宽度就会比较小,导致以后长的数据被截断,所以最好的办法是将你原表中的数据修改下,取消掉表中表的形式,数据表至少成为1范式,这样查询和修改就不会有问题。
修正的SQL:

Select * from a表 where 科目等级 not in (select PADR(trim(科目)+","+trim("等级),30," ") as 科目等级 from b表)

板凳

回复wuzhouhong:还是不行,
按此“Select * from a表 where 科目等级 not in (select trim(科目)+",trim("等级) as 科目等级 from b表)”命令,显示“命令中缺少必需的子句”

3 楼

回复wuzhouhong:还是不行,
按此“Select * from a表 where 科目等级 not in (select trim(科目)+",trim("等级) as 科目等级 from b表)”命令,显示“命令中缺少必需的子句”
     另外,请教wuzhouhong老师一个问题,在“Select * from a表 where 科目等级 not in (select trim(科目)+",trim("等级) as 科目等级 from b表)”命令中没有出现有“编号”这个字段,我的意思是以“编号”这个字段为关健字,进行相对应查询。

4 楼

试试这句吧
Select a.*[color=FF0000],[/color]b.科目 from a表 a,b表 [color=FF0000]ba.[/color] where b.编号=a.编号 and a.科目等级<>allt(b.科目)

更改一下,上面红色的逗号应为半角。红色的ba.改为b
Select a.*,b.科目 from a表 a,b表 b where b.编号=a.编号 and a.科目等级<>allt(b.科目)

5 楼


用了这句“Select a.*,b.科目 from a表 a,b表 ba. where b.编号=a.编号 and a.科目等级<>allt(b.科目)”命令,vfp提示:“命令中含有不能识别的短语或关健字”,还是不行。

6 楼

Select A.* From a表 A,B表 B Where A.编号=B.编号 And !Alltrim(B.科目)$A.科目等级

7 楼

4楼的代码属笔误,重新改了一下,应该是没有问题的。
Select a.*,b.科目 from a表 a,b表 b where b.编号=a.编号 and a.科目等级<>allt(b.科目)

我来回复

您尚未登录,请登录后再回复。点此登录或注册