ISNULL的問題, 特奇怪.

CatchWind 2005-07-30 02:52:28
CREATE TABLE TEST(TurnNo char(4),Bcxz bit)
INSERT TEST
SELECT 'T001',1 UNION
SELECT 'T002',1 UNION
SELECT 'T003',1 UNION
SELECT 'T004',1 UNION
SELECT 'T005',1

SELECT T1.TurnNo,ISNULL(T3.IsNight,0)IsNight
FROM TEST T1 LEFT JOIN
(SELECT TurnNo,1 IsNight FROM TEST WHERE BCXZ=0) T3
ON (T1.TurnNO=T3.TurnNo)
大家運行看看,結果是什么?
...全文
302 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
CatchWind 2005-08-04
  • 打赏
  • 举报
回复
沒有人告訴我錯誤的原因, 算了, 結貼...
CatchWind 2005-08-01
  • 打赏
  • 举报
回复
對啊, 我也認為第一個和第四個結果是正常的, 但偏偏有的電腦上運行會得出第二和第三种結果.
得出正確結果的電腦配置是:Windows 2000 SP4 (或Windows 2003)& SQL Server 2000 未打補丁,
得出錯誤結果的電腦配置也是相同的
hglhyy 2005-07-30
  • 打赏
  • 举报
回复
有什么问题吗?
(SELECT TurnNo,1 IsNight FROM TEST WHERE BCXZ=0) T3 本身就是一个空集!
无论1 IsNight 还是2 IsNight 都一样的是空集!

一个集合 LEFT JOIN 一个空集! 第一个和第四个结果是正确的!

那么楼主的第二三种结果在什么情况下得出的,SQL版本?补丁版本?
huangjianyou 2005-07-30
  • 打赏
  • 举报
回复
错不错是另一回事,我只是应楼主要求贴出结果而已。

^_^
CatchWind 2005-07-30
  • 打赏
  • 举报
回复
現在的問題就在于:有會電腦能正確全部返回0,而有的電腦不會.
不能正確返回的電腦也絕非偶然,因為我已遇到不止一台電腦有這個錯誤

TO:huangjianyou(小健)
你電腦上返回的結果就是錯誤的,不信你分析分析SQL語句
MorningTea 2005-07-30
  • 打赏
  • 举报
回复
咋滴我这里没有,按照楼主写的代码,不管改 1 IsNight 还是2 IsNight ,由于SELECT TurnNo,3 IsNight FROM @TEST WHERE BCXZ=1肯定为null,ISNULL(T3.IsNight,0)IsNight 肯定会都是0,因为1 IsNight是数字,而ISNULL(T3.IsNight,0)也是替代为数字,不会有什么问题!
huangjianyou 2005-07-30
  • 打赏
  • 举报
回复
我的机器运行就这个结果啊。我只是贴出来而已。

^_^
CatchWind 2005-07-30
  • 打赏
  • 举报
回复
TO: huangjianyou(小健)
結果應該是
TurnNo IsNight
--------------
T001 0
T002 0
T003 0
T004 0
T005 0

才對啊
点点星灯 2005-07-30
  • 打赏
  • 举报
回复
那这个,我也不知道了.
huangjianyou 2005-07-30
  • 打赏
  • 举报
回复
TurnNo IsNight
--------------
T001 1
T002 1
T003 1
T004 1
T005 1

^_^
CatchWind 2005-07-30
  • 打赏
  • 举报
回复
也就是一模一樣的代碼, 在不同的電腦上有不同的結果.
CatchWind 2005-07-30
  • 打赏
  • 举报
回复
回: aw511(点点星灯)
我是沒有改變BCXZ為1的情況下, 在有的電腦上結果還是
TurnNo IsNight
--------------
T001 1
T002 1
T003 1
T004 1
T005 1
然而這是不正確的, 但錯誤原因就不得而知了
CatchWind 2005-07-30
  • 打赏
  • 举报
回复
具体的問題看2樓, 在不同的電腦上運行,結果不一樣
点点星灯 2005-07-30
  • 打赏
  • 举报
回复
TurnNo IsNight
------ -----------
T001 3
T002 3
T003 3
T004 3
T005 3
点点星灯 2005-07-30
  • 打赏
  • 举报
回复
楼主,你说的1,4数据集我都 可以看到.

如果这样改,就可以看到你的2,3数据集
SELECT T1.TurnNo,T3.IsNight as IsNight
FROM @TEST T1 LEFT JOIN
(SELECT TurnNo,3 IsNight FROM @TEST WHERE BCXZ=1) T3
ON (T1.TurnNO=T3.TurnNo)


--注意BCXZ=1

点点星灯 2005-07-30
  • 打赏
  • 举报
回复
楼主,你的问题是什么呢?? isnull() 不奇怪啊!!
wangdehao 2005-07-30
  • 打赏
  • 举报
回复
有什么问题吗?
CatchWind 2005-07-30
  • 打赏
  • 举报
回复
在不同的電腦上運行,有兩种不同的結果(環境都是:Sql Server 2000)
有的結果是(我認為是正常的):
TurnNo IsNight
--------------
T001 0
T002 0
T003 0
T004 0
T005 0
而有些電腦上的運行結果是:
TurnNo IsNight
--------------
T001 1
T002 1
T003 1
T004 1
T005 1
而且, 如果將 "1 IsNight"改為 "2 IsNight"的話, 上面的結果相應地變為
TurnNo IsNight
--------------
T001 2
T002 2
T003 2
T004 2
T005 2
如果將ISNULL(T3.IsNight,0)IsNight 改為 T3.IsNight的話, 而結果都是正確的,即:
TurnNo IsNight
--------------
T001 NULL
T002 NULL
T003 NULL
T004 NULL
T005 NULL




以上問題百思不得其解, 請高手們指點一二

点点星灯 2005-07-30
  • 打赏
  • 举报
回复
TurnNo IsNight
------ -----------
T001 0
T002 0
T003 0
T004 0
T005 0

34,837

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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