2016-09-12 3 views
2

テーブル(以下のコード)を更新しようとしています。 ここで、一致するユーザーIDを抽出したい場合、一致がない場合、値6000を与えたいと考えています。 しかし、スクリプトは私が期待することをしません。 U.UserIDが存在しない場合、値が(6000)でない場合、値は書き込まれません。 問題を回避するにはどうすればよいですか?SQL:Isnull関数

/* Ensure Person (UserID)*/ 
UPDATE #List 
SET #List.UserID = ISNULL(U.UserID, '6000') 
FROM #List 
INNER JOIN table1 t1 ON #List.ID = t1.ID 
INNER JOIN User U ON U.FirstName + ' ' + U.Surname = t1.PersonFullname 
+0

'#List'は' FROM'部分のどのテーブルにも結合されていないため、悪い結果になっています。 '#iList'とは何ですか?どのように参加できますか? – gofr1

+0

申し訳ありませんが、それは単にタイプミスでした。私のコードで#Listです... – user3052850

答えて

4

私にINNERでテーブルに参加して、問題をよれば、これはあなたが最初のテーブルから更新されたすべてのレコードをしたい場合は今のマッチングだけでなく、ユーザーIDがある他のレコードだけでなく、唯一の一致するレコードをもたらすでしょう。すなわち、JOIN nullの場合、この問題の解決方法はLEFT JOINの使用です

UPDATE List 
SET List.UserID = ISNULL(U.UserID, '6000') 
FROM #iList List 
LEFT JOIN table1 t1 ON List.ID = t1.ID 
LEFT JOIN User U ON U.FirstName + ' ' + U.Surname = t1.PersonFullname