外部联接

DECLARE @isExistsDb INT = object_id('tempdb.dbo.#user');
IF @isExistsDb IS NULL
BEGIN
	CREATE TABLE #user(userId INT,name varchar(50));
	INSERT INTO #user(userId,name) VALUES(1,'公司简称');	
	
	CREATE TABLE #user_info(userId INT,fullname varchar(100));
END

SELECT ui.userId,ISNULL(ui.fullname,u.name) AS fullname
	FROM #user_info ui RIGHT JOIN #user u ON ui.userId=u.userId
	WHERE ui.userId = 1;
	
SELECT ui.userId,ISNULL(ui.fullname,u.name) AS fullname
	FROM #user_info ui RIGHT JOIN #user u ON ui.userId=u.userId
	WHERE u.userId = 1;	


结果如下




为什么第一条SQL 语句没有结果,而第二条却有?不是用了right join了吗?

关键在于条件语句。

第一条SQL语句的过滤条件是:ui.UserId=1,因为表#User_Info (ui) 里面根本没有userId=1这么一条记录,所以根本没有记录集可以供外联接,因此一条记录也没有。

而第二条是 u.UserId=1,表#user里正好有这样的记录,所以能得到结果。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值