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里正好有这样的记录,所以能得到结果。