2017-04-26 54 views
0

我有兩張表國籍和學生。兩個表都由NationalityID char(3)加入。 char擁有像'1'這樣的空格。這裏共有3個字符。但即使它們具有相同的共同價值也沒有結果。我也修剪空白,但沒有結果。請參閱查詢。使用RTRIM()SQL左連接無法使用基於條件值的char數據類型

SELECT S.StudentID,N.NationalityName 
FROM [dbo].[Student] S 
LEFT JOIN [dbo].[Nationality] N 
ON RTRIM(S.NationalityID)=RTRIM(N.NationalityID) 
WHERE S.StudentID=232 

--No Output 
+1

添加一些示例表格數據和預期結果 - 以及格式化文本。 – jarlh

+0

另請確認你是否在兩個表中有國籍編號的關係 – Simran

+1

有一件事情是用RTRIM在列上執行簡單的select語句並檢查兩個表值是否相同? –

回答

1

顯然

SELECT S.StudentID,N.NationalityName 
FROM [dbo].[Student] S 
LEFT JOIN [dbo].[Nationality] N 
ON S.NationalityID=N.NationalityID 
WHERE S.StudentID=232 

--No Output 

後,他們不具有相同的值,你應該修正數據。一個可能的問題是開始和/或結束處的空間。如果是這樣,請嘗試:

SELECT S.StudentID, N.NationalityName 
FROM [dbo].[Student] S LEFT JOIN 
    [dbo].[Nationality] N 
    ON LTRIM(RTRIM(S.NationalityID)) = LTRIM(RTRIM(N.NationalityID)) 
WHERE S.StudentID = 232; 

我不是很有信心,這將工作。假設值是ASCII字符,你可以使用ASCII功能,看看真正被存儲的是什麼:

SELECT S.NationalityID, ASCII(LEFT(S.NationalityID, 1)), 
     ASCII(SUBSTRING(S.NationalityID, 2, 1)), 
     ASCII(RIGHT(S.NationalityID, 1)) 
FROM Student s; 

一旦你想通了這一點,那麼修復數據,以便在連接正常工作。順便說一下,如果NationalityID是標識列,那麼您不會遇到此問題。

+0

謝謝@Gordon Linoff – sebu

+0

只有一個字符時不能使用'1' – sebu