2016-07-21 6 views
0

MS Access SQL에서 왼쪽 조인을 실행하려고합니다. 내 "OldPE"테이블을 새로운 "1 PE"테이블에 조인하고 "Line Num"이라고 표시된 열을 업데이트하려고합니다. 이 테이블에는 기본 키가 없으므로 일련의 조건을 통해 연결합니다. 여기 내 코드가있다. (내가 새로운 SQL을 배우면서 가난한 형식을 핑계로 삼는다.)왼쪽 조인의 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 값이나 빈 값이있는 행이 많이 있습니다. 맞춤법 오류 등으로 인해 원하는 메모 중 일부가 약간 달라지기 때문에 비슷한 문구를 사용했습니다. 그러나 이제는 "like"를 사용하여이 열에 대해 null 값이있는 행을 반환하지 않습니다. SQL 코드는 WHERE EXISTS를 받아들이지 않을 것입니다 (나는 잘못 쓰고있을 수도 있습니다).

어떻게이 null의 경우 원래 값으로 다시 가입 할 같이 명령

+0

나는 LIKE' 당신이 그것을 바랄 것이 아니다'의심 : 운영자 (Microsoft Access에서 SQL)처럼] (https://msdn.microsoft. co.kr/ko-kr/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 값과 함께 OR를 수행하여 LIKE를 수행하는 것이 좋습니다. – Grayson

+0

@Grayson - hmmm ... 대부분의 SQL 플랫폼과 'COALESCE'에 대한 내 경험이 아니 었습니다. 대부분의 경우 기대하고 여러 작업보다 최적화 할 수 있지만 Jet는 좋은 컴파일러가 아니며 사용하지 않았습니다. 훨씬 최근에 당신이 옳을 수도 있습니다. – Hogan

관련 문제