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;
結果如下
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5CNxAzM0ATMmljNldzYmljZyYzXwUzN1UTM1EzLchDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
為什麼第一條SQL 語句沒有結果,而第二條卻有?不是用了right join了嗎?
關鍵在于條件語句。
第一條SQL語句的過濾條件是:ui.UserId=1,因為表#User_Info (ui) 裡面根本沒有userId=1這麼一條記錄,是以根本沒有記錄集可以供外聯接,是以一條記錄也沒有。
而第二條是 u.UserId=1,表#user裡正好有這樣的記錄,是以能得到結果。