日期:2014-05-18 浏览次数:20530 次
declare @gy table (ID int,ID_MODIFY int) insert into @gy select 1,null insert into @gy select 1,2 declare @user table(ID int,NAME char(20)) insert into @user select 1,'李' insert into @user select 2,'张' select b.* from ( select * from @gy where id_modify is not null ) a, @user b where a.ID_MODIFY = b.ID
------解决方案--------------------
有两个
工艺表,TN_PROCESS_PLANING(ID int,ID_MODIFY int),工艺id号和工艺修改人id
人员表 USERS(ID int,NAME char(20)),人员id,人员名称
当 工艺还没有人修改时,ID_MODIFY值为null
当我想查询工艺表id,以及工艺修改人的姓名时
select TN_PROCESS_PLANING.ID,USERS.NAME from TN_PROCESS_PLANING,USERS where TN_PROCESS_PLANING.ID_MODIFY = USERS.ID
如果某个工艺的修改人为空时,那么这条工艺就被过滤掉了
怎么让这个工艺还出现,而把修改人置为空值就行了
--确实理解错了,不好意思.使用left join , isnull(col , '') col
select TN_PROCESS_PLANING.ID,isnull(USERS.NAME,'') name from TN_PROCESS_PLANING left join USERS on TN_PROCESS_PLANING.ID_MODIFY = USERS.ID
------解决方案--------------------
我想象四楼说的这样
select TN_PROCESS_PLANING.ID,USERS.NAME from TN_PROCESS_PLANING,USERS where TN_PROCESS_PLANING.ID_MODIFY = USERS.ID or TN_PROCESS_PLANING.ID_MODIFY=null
但不知道会不会出现笛卡尔积这种情况
---------------------------------------------------
会出现局部的笛卡儿积现象。
也就是NULL的会和所有的记录配对。
还是用isnull() 和left join 吧。