2012-06-01 2 views
1

혼자 일할 때 가끔씩 발생하는 성가신 문제 중 하나입니다. 나는 완전히 대답은 간단 하나가 될 것으로 기대하고 있습니다 :MySQL Join Query - OR OR 무시됨

그래서 같은 쿼리가 :

SELECT * FROM table_a 
LEFT JOIN table_b ON table_a.order_id = table_b.order_id 
WHERE (table_a.column_a='string' OR table_b.column_b='string' OR table_b.column_c='string') 
group by column_d 

이 쿼리는 모든 행을 반환하고 쿼리의 WHERE 부분을 무시하는 것 같다됩니다 ... 단, 그렇지 않은 경우는 예외입니다. OR 부품을 제거하면 예상대로 작동합니다.

SELECT * FROM table_a 
LEFT JOIN table_b ON table_a.order_id = table_b.order_id 
WHERE (table_a.column_a='string') 
group by column_d 

생각/명백한 문제?

업데이트

내 특정 문제가 내가 정수 컬럼에 대한 문자열을 평가하는 것을했다,이 알 수없는 평가 문을 의미했다. 이제 코드가 위와 같지만 문자열이 숫자 인 경우에만 해당 특정 OR을 추가합니다.

+0

포스트 예제 데이터 널 아니었다면 체크하는 조건을 추가하여이 문제를 해결할 수 않습니다 , 예상 결과 및 실제 결과. 검색어에 명백한 문제가 없으며 데이터에 문제가 있습니다. – lanzz

+0

건배 란제리, 수락 가능 응답보기 –

답변

2

사용자가 가입 한 것을 관찰함으로써 비교할 수있는 열 중 일부가 nullable이고 위상이 참인 행이 반환되는 것으로 보았습니다 (null 값에 상 UNKNOWN에 발생 된 곳에서 비교 하였다. 열이 아닌 반환. 당신은 값이)

SELECT * FROM table_a 
LEFT JOIN table_b ON table_a.order_id = table_b.order_id 
WHERE ((table_a.column_a IS NOT NULL AND table_a.column_a='string') OR (table_b.column_b IS NOT NULL AND table_b.column_b='string') OR (table_b.column_c IS NOT NULL AND table_b.column_c='string')) 
GROUP BY column_d 
+1

건배! 얼룩덜룩하다, 벽돌 벽에 내 머리를 두드리는 또 다른 4 시간을 구해줬다. –