2016-07-21 10 views
0

MS Access SQLで左結合を実行しようとしています。私は "OldPE"テーブルを新しい "1 PE"テーブルに参加させ、 "Line Num"というラベルのカラムを更新しようとしています。これらのテーブルにはプライマリキーがありません。そのため、一連の条件をリンクしています。これまでのところ、私のコードは(私は新しいとSQLを学ぶ貧しい書式設定を言い訳)です。LEFT JOINのWHERE EXISTサブクエリに関する問題

UPDATE [1 PE] 
LEFT JOIN OldPE ON ([1 PE].SumRes = OldPE.SumRes) 
AND ([1 PE].[Project Code] = OldPE.[Project Code]) 
AND ([1 PE].[DeptID] = OldPE.[DeptID]) 
AND ([1 PE].[Res Code] = OldPe.[Res Code]) 
AND ([1 PE].[Explain The Cost] LIKE OldPE.[Explain The Cost]) 
AND ([1 PE].Notes LIKE OldPE.Notes) 
SET [1 PE].[Line Num] = [OldPE].[Line Num]; 

[説明] [コストとノーツ]列には、ヌル値または空白値を持つ行が多数あります。私は同じようなステートメントを使いました。なぜなら、私が一緒にやりたいと思うメモのいくつかは、スペルミスなどによって多少異なるからです。しかし、今私が "好き"を使用すると、これらの列にNULL値を持つ行は返されません。 SQLコードは、WHERE EXISTSを受け入れません(私は間違って書いているかもしれません)。

は、どのように私はそれがnullの場合、元の値に戻って参加すること

+0

私は 'LIKE'あなたはそれが望んでいることではないと思われる:[オペレータのように(Microsoft AccessのSQL)](https://msdn.microsoft。 com/ja-us/library/bb208897(v = office.12).aspx)。 –

答えて

0

使用ISNULLを同様のコマンドを使用しながら、これらのNULL値がまだ返されるのですか。 (これは、結果でNULL値が含まれます。)

AND ([1 PE].[Explain The Cost] LIKE ISNULL(OldPE.[Explain The Cost],[1 PE].[Explain The Cost])) 
+0

これは動作しますが、フルテーブルスキャンを実行します。これらの列が索引付けされている場合は、OR値とともにNULLをチェックすることでLIKEを実行する方がよいでしょう。 – Grayson

+0

@Grayson - hmmm ...ほとんどのSQLプラットフォームと 'COALESCE'では私の経験ではありませんでしたが、ほとんどの人はそれを期待し、複数の操作よりも最適化できますが、Jetは非常に優れたコンパイラではなく、最近あなたは正しいかもしれません。 – Hogan

関連する問題