내가 당신의 문제가 모두 COL1은 NULL이며, COL2 1. 할 일입니다 행이 없다고 생각합니다 ...
SELECT COUNT(*)
FROM <table>
테이블에 127531 + 86342 개가 넘는 레코드가 있습니까? 그러면 어떤 행도 조건을 충족시킬 수 없습니다. 또한 시도해보십시오 ...
SELECT COUNT(*)
FROM <table>
WHERE <col1> IS NOT NULL
OR <col2> IS NULL OR <col2> <> 1
이렇게하면 고기가없는 행 수가 생깁니다. 테이블의 총 레코드 수와 같습니까? 그렇다면 귀하의 orignal 쿼리가 아무것도 반환하지 않는 것이 맞습니다.
나는 이상한 NULL 처리에 무슨 뜻인지 모르겠다. 나는 오라클이 다르게하는 유일한 점은 빈 문자열이 NULL이라는 것입니다. 오라클에서 문자열을 비교할 때는이를 명심해야합니다. 나도 당신이 이런 식으로 행동 MSSQL을 구성 할 수 있습니다.
기본적으로 (이상한 사용자 지정 구성없이) 나는 "부울"논리 표현식에서 사용될 때 MSSQL과 Oracle 모두 같은 방식으로 NULL을 처리합니다. 그러나 나는 그것이 어떻게 작동하는지 처음 배울 때 이상하다는 것을 알았다.
IS NULL, IS NOT NULL : 예상대로 작동합니다. 값이 NULL인지 여부에 따라 TRUE 또는 FALSE를 반환합니다.
다른 모든 운영자 : 비교되는 값 중 하나 또는 둘 모두가 NULL이면 작업 결과가 NULL입니다. 만약 하나 이상의 피연산자 :
모든 논리 연산자 (NOT, AND, OR, ...) : (예 : NULL < 1은 NULL로 평가 NULL = NULL은 NULL로 평가 NULL <> 1은 NULL로 평가) NULL 인 경우, NULL 값이 TRUE와 FALSE 일 수있는 것처럼 조작을 평가하십시오. 이 메소드가 TRUE를 리턴하는 경우와 FALSE를 리턴하는 경우 결과는 NULL입니다. (예 : NULL 및 FALSE는 FALSE로 평가되고 NULL 및 TRUE는 NULL로 평가되고 NULL은 NULL로 평가되지 않음)
조건에 따라 사용/조건 : NULL로 평가되는 논리식은 FALSE로 평가합니다. IF 블록은 실행되지 않으며 WHERE 표현식이 NULL로 평가되는 행은 반환되지 않습니다.
예 :
DECLARE
A NUMBER;
BEGIN
A:=0;
IF NULL = NULL THEN
A:=1;
END IF;
DBMS_OUTPUT.PUT_LINE(A); -- this will print 0.
END;
-- without the WHERE clause, following query
-- would result in a single row of single value "hi"
SELECT 'hi'
FROM dual
WHERE 1 <> NULL OR NULL = NULL; -- this returns no rows
편집은 : 내용과 코드 오라클과 주요 불만
한 수정이 널 (null)과 빈 문자열 동일하게 취급한다는 것이다. 그래, 네, 그것은 이상한 방식으로 null을 처리하지만, 그것은 결과 집합에 영향을 미칠 것이라고 생각하지 않습니다 – bogertron