임시 테이블에 데이터가 있고 다른 두 테이블에서 중복을 검사하고 있습니다. 발견 된 모든 중복에 대한 임시 테이블 (SET DupFlag = TRUE)에 플래그를 설정하려고합니다. 내 SELECT 문은 완벽하게 작동하여 테스트를 위해 입력 한 48 개의 중복 만 반환합니다. 그러나 UPDATE 및 WHERE EXISTS를 추가하면 idTempImport2의 모든 레코드는 SELECT 문에서 반환 된 48 개의 레코드 대신 TRUE로 설정됩니다. 내 구문이 잘못 되었습니까? 다음과 같이 보입니다 :WHERE EXISTS가 포함 된 내 UPDATE 문은 SELECT 문 결과로 제한되지 않습니다.
UPDATE idTempImport2 as tmp2 SET DupFlag = TRUE
WHERE EXISTS
(SELECT * FROM idTempImport2 tmp2
LEFT JOIN (SELECT im.idDate, im.UserID, im.ActionID, im.IsHC, idn.Epic1, idn.Epic2
FROM idMain AS im
INNER JOIN idNotes AS idn ON im.aID = idn.MainID
WHERE idDate BETWEEN "2017-01-02" AND "2017-01-31") AS qry
ON qry.idDate = tmp2.idDate AND qry.UserID = tmp2.UserID AND qry.ActionID = tmp2.ActionID AND qry.Epic1 = clng(tmp2.Epic1) AND qry.Epic2 = clng(tmp2.Epic2)
WHERE qry.Epic1 <> NULL);
당신은 그 null로 전달합니다 존재 알고있다? http://www.techrepublic.com/article/oracle-tip-understand-how-nulls-affect-in-and-exists/ http://stackoverflow.com/questions/5658457/not-equal-operator -non – user2184057
qry.Epic1 <> NULL 여기에 NULL이있는 평등 <> =! = 연산자를 사용하지 않는 오류가 있습니다. null과 비교할 때 IS NULL을 사용하고 NULL이 아님 – user2184057
그러면 업데이트가 select 문에서 반환 된 결과로 제한되지 않습니다. – Ginger