两个语句,一个有值,一个却为空值?大家看看这两个语句有什么不同?(50分)

  • 主题发起人 主题发起人 ppqingyu
  • 开始时间 开始时间
P

ppqingyu

Unregistered / Unconfirmed
GUEST, unregistred user!
两条语句,一个使用变量,一个不用变量,但是结果就是不同,为什么?
declare @FL1 TINYINT,@FL2 TINYINT,@FL3 TINYINT,@FL4 TINYINT,@FL5 TINYINT,
@FL6 TINYINT,@FL7 TINYINT,@FL8 TINYINT,@FL9 TINYINT
SELECT @FL1 = (SELECT FirstLast FROM T_Index A,T_tmpType B WHERE Num1 = A.Num AND A.Type_id = B.Type_id),
@FL1 = (SELECT FirstLast FROM T_Index A,T_tmpType B WHERE Num2 = A.Num AND A.Type_id = B.Type_id),
@FL1 = (SELECT FirstLast FROM T_Index A,T_tmpType B WHERE Num3 = A.Num AND A.Type_id = B.Type_id),
@FL1 = (SELECT FirstLast FROM T_Index A,T_tmpType B WHERE Num4 = A.Num AND A.Type_id = B.Type_id),
@FL1 = (SELECT FirstLast FROM T_Index A,T_tmpType B WHERE Num5 = A.Num AND A.Type_id = B.Type_id),
@FL1 = (SELECT FirstLast FROM T_Index A,T_tmpType B WHERE Num6 = A.Num AND A.Type_id = B.Type_id),
@FL1 = (SELECT FirstLast FROM T_Index A,T_tmpType B WHERE Num7 = A.Num AND A.Type_id = B.Type_id),
@FL1 = (SELECT FirstLast FROM T_Index A,T_tmpType B WHERE Num8 = A.Num AND A.Type_id = B.Type_id),
@FL1 = (SELECT FirstLast FROM T_Index A,T_tmpType B WHERE Num9 = A.Num AND A.Type_id = B.Type_id) FROM T_Num_basic

SELECT @FL1,@FL2,@FL3,@FL4,@FL5,@FL6,@FL7,@FL8,@FL9

select (SELECT FirstLast FROM T_Index A,T_tmpType B WHERE Num1 = A.Num AND A.Type_id = B.Type_id),
(SELECT FirstLast FROM T_Index A,T_tmpType B WHERE Num2 = A.Num AND A.Type_id = B.Type_id),
(SELECT FirstLast FROM T_Index A,T_tmpType B WHERE Num3 = A.Num AND A.Type_id = B.Type_id),
(SELECT FirstLast FROM T_Index A,T_tmpType B WHERE Num4 = A.Num AND A.Type_id = B.Type_id),
(SELECT FirstLast FROM T_Index A,T_tmpType B WHERE Num5 = A.Num AND A.Type_id = B.Type_id),
(SELECT FirstLast FROM T_Index A,T_tmpType B WHERE Num6 = A.Num AND A.Type_id = B.Type_id),
(SELECT FirstLast FROM T_Index A,T_tmpType B WHERE Num7 = A.Num AND A.Type_id = B.Type_id),
(SELECT FirstLast FROM T_Index A,T_tmpType B WHERE Num8 = A.Num AND A.Type_id = B.Type_id),
(SELECT FirstLast FROM T_Index A,T_tmpType B WHERE Num9 = A.Num AND A.Type_id = B.Type_id)
from t_num_basic
 
copy 以后记得改东西(第一个select)
第二个select对象是变量,所以肯定有1行
第三个select是纪录,没有符合的所以0行
 
FROM T_Num_basic where item = 4
你这句话有什么用啊,没看明白?
 
where条件不同
还有,select 子集如果有一个为空,会使外select的查得内容为空
好像是这样,这个可能要调试才知道,
你选确保每个select的值都不为NULL后,做外层的select
 
没有where结果也一样.因为记录只得一条.差不多相同的语句,这个却没有问题
SELECT @First1 = (SELECT [First] FROM T_Index A,T_tmpType B WHERE Num1 = A.Num AND A.Type_id = B.Type_id),
@First2 = (SELECT [First] FROM T_Index A,T_tmpType B WHERE Num2 = A.Num AND A.Type_id = B.Type_id),
@First3 = (SELECT [First] FROM T_Index A,T_tmpType B WHERE Num3 = A.Num AND A.Type_id = B.Type_id),
@First4 = (SELECT [First] FROM T_Index A,T_tmpType B WHERE Num4 = A.Num AND A.Type_id = B.Type_id),
@First5 = (SELECT [First] FROM T_Index A,T_tmpType B WHERE Num5 = A.Num AND A.Type_id = B.Type_id),
@First6 = (SELECT [First] FROM T_Index A,T_tmpType B WHERE Num6 = A.Num AND A.Type_id = B.Type_id),
@First7 = (SELECT [First] FROM T_Index A,T_tmpType B WHERE Num7 = A.Num AND A.Type_id = B.Type_id),
@First8 = (SELECT [First] FROM T_Index A,T_tmpType B WHERE Num8 = A.Num AND A.Type_id = B.Type_id),
@First9 = (SELECT [First] FROM T_Index A,T_tmpType B WHERE Num9 = A.Num AND A.Type_id = B.Type_id) FROM T_Num_Basic
SELECT @First1,@First2,@First3,@First4,@First5,@First6,@First7,@First8,@First9
不论当中有没有空值,各个值都可以查出来,包括空值
 
to hunterx1:
第一个SELECT 是赋值.
第二个第二个select对象是变量,但所有查出来的都是空值,
第三个select是纪录,有一行记录
 
第一个select赋值都赋到了一个变量上面,所以记得copy以后改东西
 
楼主为什么不回答俺的问题呢,那个才是关键,
FROM T_Num_basic where item = 4
如果没有符合where的条件,那么即使你里面的有结果,最终变量是不会赋值的.默认为null
FROM T_Num_basic
这个没有加判断,他会判断表里面是不是有记录,如果有的话,才会对变量的赋值进行操作.
默认为null

to hs9206:
应该是外部的查询为空,里面肯定没有结果的,里面不影响外面的.
 
to hityou:
FROM T_Num_basic where item = 4
这个WHERE 我已经说过,没有这个WHERE,结果还是一样,因为数据集只有一条记录,其ITEM = 4.
 
to hs9206,hityou,hunterx1:有结果了.不过不是语句有问题,是粗心的问题.大家有没有发现,九个被赋值的变量都是@FL1,@FL2至@FL9都没有被赋值,他们当然是空值.@FL1最后一次被赋的也是空值,所以查出来的结果全部就是空值.还以为是MSSQL的问题,原来是粗心大意造成的.
谢谢大家的提醒了.
 
多人接受答案了。
 
后退
顶部