高手请来看看 (60分)

  • 主题发起人 主题发起人 kntrue
  • 开始时间 开始时间
K

kntrue

Unregistered / Unconfirmed
GUEST, unregistred user!
数据库:server2000
表1:depUserInfo
字段:userId,userName......
表2:userTrainInfo
字段:trainId,trainYear,trainTime,trainInfo....
trainId 来自于表1,及参加培训的id才写入表2
问题1:select userId,userName,trainYear,trainInfo,trainTime from depUserInfo,userTrainInfo where
depUserInfo.userId*=userTrainInfo.trainId and createYear='2002' and trainYear='2002'
使用作左外连接得到了我要的结果。但是这些没有参加培训的记录的trainYear,trainInfo,trainTime
字段显示为null
请问如何使显示为空而不是null

问题2:使用
select userId,userName,trainInfo,trainTime from depUserInfo LEFT OUTER JOIN userTrainInfo on
(depUserInfo.userId = userTrainInfo.trainId) where depUserInfo.createYear='2002' and userTrainInfo.trainYear='2002'
查询只能得到参加培训过的记录。而我要的是在这一年里的员工都列出来,没培训过得培训记录显示为空(不是null)
请问如何正确写出
清高手解答,一题30分
 
1.可以通过IsNull来做isnull(字段,'')这样来处理。
 
to yeath:请讲的详细些。多谢
 
select userId,userName,trainInfo,trainTime from depUserInfo LEFT OUTER JOIN userTrainInfo on
(depUserInfo.userId = userTrainInfo.trainId) where depUserInfo.createYear='2002'
这样试试看,行不行?
 
第1题:
select userId,userName,isnull(trainYear,''),isnull(trainInfo,''),isnull(trainTime,'') from depUserInfo,userTrainInfo where
depUserInfo.userId*=userTrainInfo.trainId and createYear='2002' and trainYear='2002'
 
to yeath:老兄果然并非浪的虚名^_^多谢
但是:用老兄的方法
问题2:确实已经解决,可是是否能给我解释一下问什么不能用后面的那个条件呢?
问题1:其他字段确实可以替换掉null,但是trainTime字段显示为1900-01-01 00:00:00
我估计是这个字段我设成了dateTime所致,请老兄解释一下,给各解决办法使它
为''。
多谢
 
其实我对sql server不熟悉的,我也是刚看帮助才知道什么是left outer join。
它是取出第一个输入的全部数据,因为你数据库设计 的时候,depUserInfo表已经
包含了所有的员工信息,而userTrainInfo 表包含只参加培训的员工,加那个条件,当然会
出现你说的情况。
 
第二个问题是你的字段是Datetime的原因,解决方法:改成下面的形式
isnull(convert(varchar,Traintime,20),'')
 
多谢,一个问题让我懂了很多,我是找到了语法试着用,不及老兄你钻的深,向你学习
现在散分,不好意思60分有点少
 
后退
顶部