2017-04-26 9 views
0

私は2つのテーブル国籍と学生を持っています。どちらの表も国籍ID char(3)で結合されています。 charは '1'のようなスペースを保持します。ここでは両方のテーブルに合計3文字が使用されます。同じ共通価値を持っていても結果はありません。私は空白スペースもトリミングしましたが、結果はありません。クエリを参照してください。 SQL Left Joinは条件付き値に基づいてcharデータ型で動作しません

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 RTRIM(S.NationalityID)=RTRIM(N.NationalityID) 
WHERE S.StudentID=232 

--No Output 
+1

いくつかのサンプルテーブルデータと期待される結果、および書式付きテキストを追加します。 – jarlh

+0

また、両方のテーブルの国籍IDに関係があるかどうか確認してください – Simran

+1

RTRIMを使用して単純なSELECT文を実行し、両方のテーブル値が同じかどうかをチェックしますか? –

答えて

1

()RTRIMを使用した後、彼らは同じ値を持っていない、あなたは、データを修正する必要があります。考えられる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がID列の場合、この問題は発生しません。

+0

ありがとう@Gordon Linoff – sebu

+0

文字が1文字のときに '1'で作業しない – sebu

関連する問題