MySQL在一个表上进行交叉查询

MySQL在一个表上进行交叉查询,mysql,sql,sqlcommand,intersect,Mysql,Sql,Sqlcommand,Intersect,我有一个包含用户事件信息的表,即每行包含一个ID、用户的开始日期、完成日期和事件编号。例如: 第1行:ID 256 |开始日期13360500 |结束日期13390500 |事件编号3 我正在尝试为已完成事件3和2的用户相交所有行,但我不明白为什么我的查询没有返回任何结果: SELECT table_id FROM table WHERE table_EventNum = 3 AND table_FinishDate > 0 AND table_id IN (S

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

第1行:ID 256 |开始日期13360500 |结束日期13390500 |事件编号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,但由于两个查询都返回结果,我不确定还有什么原因会导致这种情况


有什么想法吗?谢谢

假设事件未完成时FinishDate为空。还假设必须有一行具有匹配的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

请注意,除了您不需要子查询之外,我没有发现您的查询有任何错误。

我只选择表id而不是同时选择FinishDate和表id,这有什么区别吗?我以为MySQL会先执行SELECT操作,然后执行IN ID的命令?从table_EventNum=3和table_FinishDate>0的表中选择table_ID、FinishDate,从table_EventNum=2的表中选择table_ID;-应该可以,没有区别