2016-06-02 2 views
0

표 B "USING"column_1과 조인 된 표 A가 있습니다. 나는 사용하여 시도, 쿼리 column_2의 값이NOT EQUAL 연산자를 사용할 때 NULL 처리

그래서 표 B에 column_2, column_3 또는 결합 된 행의 column_4의 값 중 하나를 동일하지 않습니다 표 A의 모든 행을 표시하려면 :

WHERE 
A.column_2 <> B.column_2 AND 
A.column_2 <> B.column_3 AND 
A.column_2 <> B.column_4 

이제 B.column_2, B.column_3 및 B.column_4의 모든 셀에 값이 있으면 쿼리 확인이 작동하고 A.column_2의 값이없는 표 A의 모든 행이 나열됩니다 표 B에서 일치합니다.

표 B의 셀 중 일부가 NULL 값을 갖는 경우 문제가 발생합니다. 그러면 결과가 반환되지 않습니다. 이것은 MySQL이 다음은 FALSE로 간주 때문인 것으로 보인다

23 <> NULL 

을 ... 그리고 쿼리가 모든 검사가 TRUE를 반환 사례를 찾고 있기 때문에, 그것은 아무 것도 반환하지 않습니다.

다음은 IFNULL 값이 0 인 IFNULL로 둘러 쌓인 표 B 열을 배치하여 적용한 해결 방법입니다. 기본적으로 모든 NULL 셀이 0으로 변환되므로 NOT EQUAL 검사 일치가 없으면 표 A의 행이 표시 될 때 TRUE를 올바르게 리턴합니다. 코드는 다음과 같습니다.

WHERE 
A.column_2 <> IFNULL(B.column_2, 0) AND 
A.column_2 <> IFNULL(B.column_3, 0) AND 
A.column_2 <> IFNULL(B.column_4, 0) 

이 문제를 처리하는 방법은 대략적인 것처럼 보입니다. 이 문제를 해결할 더 좋은 방법이 있습니까?

+0

)이 거의 COALESCE()와 같은, 그냥 1 값으로 제한됩니다. –

+0

@Jordan IFNULL을 (사용할 수 있습니다 – Shadow

답변

0

연산자 < => 연산자를 사용할 수도 있습니다.

MariaDB [(none)]> SELECT 1 <> 1 , 1 <> 0 , 0 <> 0, 0 <> NULL , NULL <> 0 , 0 <=> NULL, NULL <=> 0, NULL <=> NULL; 
+--------+--------+--------+-----------+-----------+------------+------------+---------------+ 
| 1 <> 1 | 1 <> 0 | 0 <> 0 | 0 <> NULL | NULL <> 0 | 0 <=> NULL | NULL <=> 0 | NULL <=> NULL | 
+--------+--------+--------+-----------+-----------+------------+------------+---------------+ 
|  0 |  1 |  0 |  NULL |  NULL |   0 |   0 |    1 | 
+--------+--------+--------+-----------+-----------+------------+------------+---------------+ 
1 row in set (0.00 sec) 

MariaDB [(none)]> 
+0

<=>은 null 안전 equasion 연산자입니다. 당신은 질문에서와 같은 결과물을 얻기 위해이 연산자로 꽤 복잡한 조건을 만들어야 할 것입니다. – Shadow

0

내가 대신 not in 연산자를 사용합니다 참조 :

... WHERE A.column_2 NOT IN (B.column_2,B.column_3,B.column_4) 
당신이 병합 기능
+0

그게 전부 야! 나는 IN과 NOT IN을 다른 것들에 사용합니다. 그러나 일반적으로 정적 값 집합에 있습니다. 나는 세포가 같은 방식으로 참조 될 수 있다는 것을 잊는다. 좋은 점은 IN은 반대쪽을 확인하기 위해 작동합니다. 즉, 일치하는 모든 행을 표시합니다. 명성! – PhoenixTech

+0

그러면 pls가 대답을 승인 된 것으로 표시하여이 주제의 다른 시청자에게 질문이 해결되었음을 보여줍니다! – Shadow

+0

나는 해냈다. 그러나 평판 점수가 15 점을받을 때까지 내가 한 것을 보여주지는 않습니다. (나는 아직도 여기에서 새로운 ....) – PhoenixTech

관련 문제