SQL Left Join不使用基于条件值的char数据类型

时间:2017-04-26 11:31:59

标签: sql sql-server

我有两张桌子国籍和学生。这两个表都由belongsID char(3)连接。 char保存像'1'这样的空格。这两个表共有3个字符。但即使它们具有相同的共同价值,也没有结果。我也修剪了空白但没有结果。请查看查询。

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

使用RTRIM()

之后
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 个答案:

答案 0 :(得分:1)

显然,他们没有相同的价值,您应该修复数据。一个可能的问题是开始和/或结束处的空格。如果是这样,请尝试:

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是标识列,则不会出现此问题。