以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  请教:两张表按指定字段比较并返回未匹配的记录  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=77188)

--  作者:bahamute
--  发布时间:2015/11/12 15:28:00
--  请教:两张表按指定字段比较并返回未匹配的记录
表A有4000多条记录,表B有2700多条记录,
都有编号列(编号唯一),如何对编号做比较,并返回所有编号不匹配的所有记录?
sql语句该如何下手?


--  作者:大红袍
--  发布时间:2015/11/12 15:30:00
--  

select * f rom {表A} Where 编号 not in (select 编号 f rom {表B})


--  作者:大红袍
--  发布时间:2015/11/12 15:32:00
--  

select a.*, b.编号 as b编号 f rom {表A} a left join {表B} b on a.编号=b.编号 where b编号 is null


--  作者:bahamute
--  发布时间:2015/11/12 15:33:00
--  
两种语句都可以吧
--  作者:bahamute
--  发布时间:2015/11/12 16:28:00
--  
用3楼语法从SQL命令窗口测试出错:

列名 \'b工号\' 无效

Select 表a.*, 表b.工号 As b工号 fr om 表a left join 表b on 表a.工号=表b.工号 where b工号 Is null

--  作者:大红袍
--  发布时间:2015/11/12 17:01:00
--  

哦,写错了

 

Select 表a.* fr om 表a left join 表b on 表a.工号=表b.工号 where 表b.工号 Is null

--  作者:bahamute
--  发布时间:2015/11/12 21:53:00
--  
谢谢大红袍,这句代码起作用了,但我忽略了一点,
就是表b需要先筛选(比如:Select * fr om 表b where ny=\'201507\'),然后再与表a匹配查询,那这个子查询语句该放到下面哪里?
Select 表a.* fr om 表a left join 表b on 表a.工号=表b.工号 where 表b.工号 Is null

--  作者:大红袍
--  发布时间:2015/11/12 22:16:00
--  
Select 表a.* fr om 表a left join 表b on 表a.工号=表b.工号 where 表b.工号 Is null and 表b.ny = \'201507\'