原语句如下 select * from 东区6_2期 where (站号)not in (select 站号 from 城区已交站) 东区6_2期,城区已交站是两个表,站号是他们都有的字段,但是这两个表不存在相包含的情况。 要求出[东区6_2期]表中与[城区已交站]中不同的部分 关于zzyy()仁兄的解答,我试了,依然是零个纪录。 我的另一种方法是虽然能够得出结果,但是我觉得逻辑上发生了变化。 源语句如下 SELECT * FROM 东区6_2期 where (站号 NOT in(SELECT 城区已交站.站号 FROM 东区6_2期,城区已交站 WHERE 城区已交站.站号=东区6_2期.站号)) 这时好像已经在[东区6_2期]表内进行比较,我十分困惑!!!
我使用analyzer分析后,发现一个问题,为什么执行第一个语句时会进行filter判断站号is null,然后再进行筛选,但是这样一来就没有任何价值了,不知道为什么要进行 is null 的筛选, 更改后通过的语句如下 SELECT * FROM 东区6_2期 a where a.站号 not in(SELECT all b.站号 FROM 城区已交站 b where b.站号 is not null)and a.站号 is not null
第一条语句应该可以。 这样试试: select * from 东区6_2期 a where a.站号 not in (select distinct b.站号 from b.站号 is not null)另外,字段名用中文比较方便,但表名也用中文就有点别扭了。
select * from 东区6_2期
where (站号)not in (select 站号 from 城区已交站)
东区6_2期,城区已交站是两个表,站号是他们都有的字段,但是这两个表不存在相包含的情况。
要求出[东区6_2期]表中与[城区已交站]中不同的部分
关于zzyy()仁兄的解答,我试了,依然是零个纪录。
我的另一种方法是虽然能够得出结果,但是我觉得逻辑上发生了变化。
源语句如下
SELECT * FROM 东区6_2期
where (站号 NOT in(SELECT 城区已交站.站号 FROM 东区6_2期,城区已交站 WHERE 城区已交站.站号=东区6_2期.站号))
这时好像已经在[东区6_2期]表内进行比较,我十分困惑!!!
更改后通过的语句如下
SELECT * FROM 东区6_2期 a
where a.站号 not in(SELECT all b.站号 FROM 城区已交站 b where b.站号 is not null)and a.站号 is not null
这样试试:
select * from 东区6_2期 a where a.站号 not in (select distinct b.站号 from b.站号 is not null)另外,字段名用中文比较方便,但表名也用中文就有点别扭了。
另外,数据表中应该尽可能的避免使用null,实现不行,你可以用""呀。
你把你的null,全改成"".再试试你的第一条语句。其实,在《sql server技术内幕》里说的很明白,除非有很重要的理由,不推荐使用null.
那么not in就会失效,yangzi兄说的很有道理