2016-07-21 2 views
0

Я пытаюсь запустить левое соединение в MS Access SQL. Я пытаюсь перейти в мою таблицу «OldPE» в новую таблицу «1 PE» и обновить столбец «Line Num». В этих таблицах нет первичного ключа, поэтому я связываю их с помощью ряда условий. Вот мой код до сих пор (извините плохое форматирование, я новичок и все еще изучаю SQL).Проблема с WHERE EXIST-подзапросом LEFT JOIN

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]; 

Есть много строк, которые имеют нулевые или пустые значения в их «Объяснить стоимость» и «Примечание» столбцы. Я использовал подобное заявление, потому что некоторые примечания, которые я хочу вместе, немного отличаются из-за орфографических ошибок и т. Д. Однако теперь, когда я использую «как», он не вернет строки с нулевым значением для этих столбцов. Код SQL не принимает WHERE EXISTS (я также могу просто написать его неправильно).

Как получить эти нулевые значения по-прежнему быть возвращены при использовании команды Like

+0

Я подозреваю, что 'LIKE' это не то, что вы надеетесь, это: [Как Operator (Microsoft Access SQL)] (https://msdn.microsoft. ком/EN-US/библиотека/bb208897 (v = office.12) .aspx). –

ответ

0

Использование ISNULL присоединиться обратно к исходному значению, если она равна нулю. (Это будет включать нулевые значения в результатах.)

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

Это будет работать, но будет выполнять полноэкранное сканирование. Если эти столбцы проиндексированы, было бы лучше выполнить LIKE вместе с OR, проверяя значение NULL. – Grayson

+0

@Grayson - хммм ... не был моим опытом работы с большинством SQL-платформ и «COALESCE», большинство из них ожидают его и могут оптимизировать для него лучше, чем несколько операций, но Jet не очень хороший компилятор, и я его не использовал совсем недавно, чтобы вы были правы. – Hogan