0

我有一个包含用户事件信息的表,即每一行都包含一个 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);

这个没有子查询的查询(与底部的其余部分分开的行)返回一堆非空结果,正如它应该的那样,子查询也返回一堆非空结果(同样,它应该)。但由于某种原因,复合查询根本不返回任何行。我知道IN如果任一侧的表达式为 NULL,该命令将返回 NULL,但由于两个查询都返回结果,我不确定还有什么可能导致这种情况。

有任何想法吗?谢谢!

4

1 回答 1

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

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

于 2013-07-09T16:46:03.837 回答