MySQL在一个表上相交查询

时间:2013-07-09 16:32:22

标签: mysql sql sqlcommand intersect

我有一个包含用户事件信息的表,即每行包含一个ID,一个用户的开始日期,完成日期和事件编号。例如:

第1行:ID 256 | StartDate 13360500 | FinishDate 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,IN命令返回NULL,但由于两个查询都返回结果,我不确定还有什么可能导致这种情况。

有什么想法吗?谢谢!

1 个答案:

答案 0 :(得分: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

请注意,除了您不需要子查询这一事实外,我发现您的查询没有任何问题。