2013-07-09 250 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); 

這個查詢無子查詢(與底部其餘部分分離的行)返回一堆非空結果,因爲它應該這樣,子查詢也會返回一堆非空結果(同樣,它應該)。但由於某種原因,組合查詢根本不返回任何行。我知道IN命令返回NULL,如果任一側的表達式爲NULL,但由於兩個查詢都返回結果,我不確定還有什麼可能導致此結果。

任何想法?謝謝!

回答

1

假設事件未完成時FinishDate爲NULL。還假設,必須有相匹配的ID和事件數2和事件連續3無法事件2之前發生:

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 

注意,我找不到什麼毛病不是事實,你的其他查詢不需要子查詢。

+0

是否有區別,我只選擇table_id而不是FinishDate和table_id?我認爲MySQL會首先執行SELECT操作,然後執行IN(ID)命令? – mgh14

+0

SELECT table_id,FinishDate FROM table WHERE table_EventNum = 3 AND table_FinishDate> 0 AND table_id IN(SELECT table_id FROM table WHERE table_EventNum = 2); - 應該沒問題,沒有區別 – Tarik