- id
- 姓名
- id
- 表现日期
- 标题
- 官员id
- 报告id
到目前为止,我尝试了以下方法(以下对我无用!):
SELECT *
FROM Officer
LEFT JOIN report_officer
ON Officer.id = report_officer.officer_id
LEFT JOIN Report
ON Report.id = report_officer.report_id
WHERE (performanceDate IS NULL
OR performanceDate < "2014-03-23 00:00:00"
OR performanceDate > "2014-04-01 00:00:00"
)
当官员仅与某个特定时间范围内的报告相关联时,我的左连接查询才有效,但一旦他们有多个报告,就会失败。
结果:
+------------+-----------------+
| officer_id | performanceDate |
+------------+-----------------+
| 130 | NULL | # good
| 134 | 2014-03-02 | # bad - officer_id 134 has a performanceDate
| 134 | 2014-03-09 | # on 2014-3-30, I do not want this in the results.
| 134 | 2014-03-16 | #
| 135 | 2014-03-02 | # good
+------------+-----------------+
SQL Fiddle: http://sqlfiddle.com/#!2/1bf72/3 <- 在 sql fiddle 中,请参考 'name' 字段,以获取需要返回的列。有没有任何想法来使这个工作起来?
理想情况下,我希望这个查询尽可能简单地与我的 ORM 一起使用。 我正在使用 doctrine 并且不想开始使用完全定制的代码(因此,如果只能使用联接完成,则会很好)。 但是我有一个不好的预感我需要一个子查询。
having
代替where
。 - salgua>=
)- 以防万一有人在午夜实际上输入了一个时间戳(或系统将所有日期归一化为当天的开始)。 - Clockwork-Muse