查到无该纪录
select * from temptable where bdhm ='000000187893'
查到有该纪录,找到一条
select * from temptable where bdhm not in (select bdhm from h_xzmx)
无纪录。
问题:h_xzmx是个工资集合,有数千条保单号码,TEMPTABLE是一个业务员的临时表,该表中有的保单号bdhm会出现在h_xzmx中,有的不出现。另两个表中都存在少数NULL值
那么例题中的保单号,既然工资中没有,临时表中有。那我用第三句语句查哪些在临时表中有的,但在工资表中没有的,结果一条也没找到,那与上述单项查询逻辑不符啊,用TRIM等办法我都试过了,仍然没用。
6 个解决方案
#1
语句没有错误啊.我自己试的也不会.
create table #h_xzmx(bdhm varchar(100))
create table #temptable(bdhm varchar(100))
insert #temptable
select '000000187893'
select * from #h_xzmx where bdhm ='000000187893'
--没有记录
select * from #temptable where bdhm ='000000187893'
--有一条
select * from #temptable where bdhm not in (select bdhm from #h_xzmx)
--有一条
drop table #h_xzmx
drop table #temptable
create table #h_xzmx(bdhm varchar(100))
create table #temptable(bdhm varchar(100))
insert #temptable
select '000000187893'
select * from #h_xzmx where bdhm ='000000187893'
--没有记录
select * from #temptable where bdhm ='000000187893'
--有一条
select * from #temptable where bdhm not in (select bdhm from #h_xzmx)
--有一条
drop table #h_xzmx
drop table #temptable
#2
奇怪,我这儿就这样的
#3
向h_xzmx表中插入一bdhm ='000000187893'的新行,然后在查询一下.如果成功则说明h_xzmx表中bdhm列的值输入有问题,可能有前空格,类似' 000000187893'.
#4
我知道了,要在后面去除NULL值
select * from temptable where bdhm not in (select bdhm from h_xzmx where bdhm is not null)
这样才行,你们知道为什么吗,我搞不明白
select * from temptable where bdhm not in (select bdhm from h_xzmx where bdhm is not null)
这样才行,你们知道为什么吗,我搞不明白
#5
学习...
#6
declare @a varchar(100)
create table #h_xzmx(bdhm varchar(100))
insert #h_xzmx
select '1111'
union all select @a
create table #temptable(bdhm varchar(100))
insert #temptable
select '000000187893'
union all select @a
select bdhm from #h_xzmx
--有二条
select * from #temptable
--有二条
select * from #temptable where bdhm not in (select bdhm from #h_xzmx)
--无
select * from #temptable where bdhm not in (select isnull(bdhm,'') from #h_xzmx)
--有一条
select * from #temptable where bdhm not in (select bdhm from #h_xzmx where bdhm is not null)
--有一条
drop table #h_xzmx
drop table #temptable
分析结果.not in 子句受空值影响
create table #h_xzmx(bdhm varchar(100))
insert #h_xzmx
select '1111'
union all select @a
create table #temptable(bdhm varchar(100))
insert #temptable
select '000000187893'
union all select @a
select bdhm from #h_xzmx
--有二条
select * from #temptable
--有二条
select * from #temptable where bdhm not in (select bdhm from #h_xzmx)
--无
select * from #temptable where bdhm not in (select isnull(bdhm,'') from #h_xzmx)
--有一条
select * from #temptable where bdhm not in (select bdhm from #h_xzmx where bdhm is not null)
--有一条
drop table #h_xzmx
drop table #temptable
分析结果.not in 子句受空值影响
#1
语句没有错误啊.我自己试的也不会.
create table #h_xzmx(bdhm varchar(100))
create table #temptable(bdhm varchar(100))
insert #temptable
select '000000187893'
select * from #h_xzmx where bdhm ='000000187893'
--没有记录
select * from #temptable where bdhm ='000000187893'
--有一条
select * from #temptable where bdhm not in (select bdhm from #h_xzmx)
--有一条
drop table #h_xzmx
drop table #temptable
create table #h_xzmx(bdhm varchar(100))
create table #temptable(bdhm varchar(100))
insert #temptable
select '000000187893'
select * from #h_xzmx where bdhm ='000000187893'
--没有记录
select * from #temptable where bdhm ='000000187893'
--有一条
select * from #temptable where bdhm not in (select bdhm from #h_xzmx)
--有一条
drop table #h_xzmx
drop table #temptable
#2
奇怪,我这儿就这样的
#3
向h_xzmx表中插入一bdhm ='000000187893'的新行,然后在查询一下.如果成功则说明h_xzmx表中bdhm列的值输入有问题,可能有前空格,类似' 000000187893'.
#4
我知道了,要在后面去除NULL值
select * from temptable where bdhm not in (select bdhm from h_xzmx where bdhm is not null)
这样才行,你们知道为什么吗,我搞不明白
select * from temptable where bdhm not in (select bdhm from h_xzmx where bdhm is not null)
这样才行,你们知道为什么吗,我搞不明白
#5
学习...
#6
declare @a varchar(100)
create table #h_xzmx(bdhm varchar(100))
insert #h_xzmx
select '1111'
union all select @a
create table #temptable(bdhm varchar(100))
insert #temptable
select '000000187893'
union all select @a
select bdhm from #h_xzmx
--有二条
select * from #temptable
--有二条
select * from #temptable where bdhm not in (select bdhm from #h_xzmx)
--无
select * from #temptable where bdhm not in (select isnull(bdhm,'') from #h_xzmx)
--有一条
select * from #temptable where bdhm not in (select bdhm from #h_xzmx where bdhm is not null)
--有一条
drop table #h_xzmx
drop table #temptable
分析结果.not in 子句受空值影响
create table #h_xzmx(bdhm varchar(100))
insert #h_xzmx
select '1111'
union all select @a
create table #temptable(bdhm varchar(100))
insert #temptable
select '000000187893'
union all select @a
select bdhm from #h_xzmx
--有二条
select * from #temptable
--有二条
select * from #temptable where bdhm not in (select bdhm from #h_xzmx)
--无
select * from #temptable where bdhm not in (select isnull(bdhm,'') from #h_xzmx)
--有一条
select * from #temptable where bdhm not in (select bdhm from #h_xzmx where bdhm is not null)
--有一条
drop table #h_xzmx
drop table #temptable
分析结果.not in 子句受空值影响