2013-07-09 4 views
0

사용자에 대한 이벤트 정보가 포함 된 테이블이 있습니다. 즉, 각 행에는 ID, 사용자 시작 날짜, 완료 날짜 및 이벤트 번호가 있습니다. 예 :하나의 테이블에서 MySQL 교차 쿼리

행 1 : ID 256 | StartDate 13360500 | 마감일 13390500 | EventNum 3

내가 이벤트 3 & 2를 완료 한 사용자에 대한 모든 행을 교차하도록 노력하고 있어요,하지만 난 내 쿼리 결과가 반환되지 않는 이유를 알아낼 수 없습니다 :

SELECT table_id FROM table 
    WHERE table_EventNum = 3 
    AND table_FinishDate > 0 

    AND table_id IN (SELECT table_id FROM table WHERE table_EventNum = 2); 

이 쿼리하지 않고를 서브 쿼리 (나머지는 하단에서 분리 된 라인)는 반드시 null이 아닌 결과를 반환하며, 서브 쿼리는 null이 아닌 결과를 반환합니다 (다시 말하지만). 그러나 어떤 이유로 복합 쿼리는 행을 반환하지 않습니다. 양쪽에있는 표현식이 NULL 인 경우 IN 명령이 NULL을 반환한다는 것을 알고 있지만 두 쿼리 모두 결과를 반환하므로이 문제를 일으키는 원인이 무엇인지 알 수 없습니다.

아이디어가 있으십니까? 감사!

답변

1

이벤트가 완료되지 않은 경우 FinishDate가 NULL이라고 가정합니다.

SELECT t1.table_id FROM table t1 INNER JOIN table t2 ON t1.table_id = t2.table_id 
    WHERE t1.table_EventNum = 3 AND t2.table_EventNum = 2 
    AND NOT t1.table_FinishDate IS NULL 

주 내가 그 사실 이외의 쿼리 잘못된 점을 찾을 수 없습니다 : 또한 3 이벤트 2 전에 일어날 수없는 일치 ID와 이벤트 번호 2와 해당 이벤트와 행이 있어야한다 가정 하위 쿼리가 필요하지 않습니다.

+0

FinishDate와 table_id 대신 table_id 만 선택한다는 차이점이 있습니까? MySQL이 SELECT 액션을 먼저 수행 한 다음 IN (ID) 명령을 실행한다고 생각했습니다. – mgh14

+0

SELECT table_id, FinishDate FROM 테이블 where table_EventNum = 3 및 table_FinishDate> 0 및 table_id IN (SELECT table_id FROM 테이블 WHERE table_EventNum = 2); - 괜찮을거야. 차이는 없어. – Tarik

관련 문제