IDS 9.40写嵌套子查询的奇怪问题

merlinran 2007-02-10 03:08:37
测试的SQL如下:

SELECT serv_id FROM serv_65 where serv_id = 148951
无数据返回。

SELECT a.acc_nbr, a.serv_id, a.state FROM f_serv a
WHERE a.state in ('F0A', 'F0J')
AND a.serv_id NOT IN (SELECT serv_id FROM serv_65 where serv_id = 148951)
AND a.completed_date <= '2007-01-31 23:59:59'
AND a.serv_id = 148951
返回一条数据,其serv_id = 148951。

但把子查询里的条件去掉后:
SELECT a.acc_nbr, a.serv_id, a.state FROM f_serv a
WHERE a.state in ('F0A', 'F0J')
AND a.serv_id NOT IN (SELECT serv_id FROM serv_65)
AND a.completed_date <= '2007-01-31 23:59:59'
AND a.serv_id = 148951
却无数据返回。
实在百思不得其解。请各位仁兄解惑。
...全文
331 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
merlinran 2007-06-19
  • 打赏
  • 举报
回复
这个问题的原因好久以前就从Informix新闻组找到了,不好意思没发上来。
问题在于(SELECT serv_id FROM serv_65)返回的集合中有NULL值。
Informix对于子查询有空值的情况,不管是IN还是NOT IN,都认为是空集,自然就没有结果返回了。
对应的讨论在这里:
http://groups.google.com/group/comp.databases.informix/browse_thread/thread/46a74db877b53f43/8915bf2755d60f40
shao99 2007-06-19
  • 打赏
  • 举报
回复
Informix对于子查询有空值的情况,不管是IN还是NOT IN,都认为是空集,自然就没有结果返回了。

----- 谢谢了。
asa80 2007-02-26
  • 打赏
  • 举报
回复
也感觉有点奇怪,不过感觉这条语句 AND a.serv_id NOT IN (SELECT serv_id FROM serv_65 where serv_id = 148951) , not in之后的子查询中没有输出结果,不知道会产生什么结果。
Baku 2007-02-11
  • 打赏
  • 举报
回复
见鬼了....

1,194

社区成员

发帖
与我相关
我的任务
社区描述
其他数据库开发 Informix
社区管理员
  • Informix社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧