天天看點

外部聯接

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裡正好有這樣的記錄,是以能得到結果。