【发布时间】:2011-08-12 17:03:27
【问题描述】:
我正在编写一个复杂的 MySQL 查询,但不知道如何完成它。
这是给我带来麻烦的部分(这只是我查询的一部分):
SELECT * FROM table AS t1
WHERE date < (
SELECT date FROM table AS t2
WHERE phase="B" AND t2.target = t1.target
)
基本上,我有项目,每个项目都有一个日期、一个阶段(A、B、C)和一个目标。对于一个目标,有几个 A 类型的项目,然后是 B 类型的 单个 和 可选 项目,然后是 C 类型的项目。
对于每个目标,我想选择符合以下条件的所有行:
- 如果有一个阶段为“B”的项目(我们称他为 itemX),我想返回所有日期低于 itemX 日期的项目
- 如果没有“B”阶段的项目,我想返回所有行
日期参数非常重要。在大多数情况下,这 3 个阶段是不同的,不能重叠,但在某些情况下会发生这种情况。
这里的问题是,我的子查询在案例 1 中没有返回任何行,在案例 2 中没有返回单个单元格。
如果是情况 1,则整个条件 WHERE date < (...) 是不相关的,不应在查询中应用。
我尝试了IFNULL 和EXISTS 的几种可能性,但我认为我做错了,因为我不断收到语法错误。
【问题讨论】: