【发布时间】:2014-05-01 21:49:47
【问题描述】:
我正在比较两个表 A 和 B 的日志条目间隔,即对于给定用户,表中的每条记录是第一个日志条目,然后是另一个日志条目,如下所示:
+--------+----------+--------+-----------+--------+
| userID | date1 | logID1 | date2 | logID2 |
+--------+----------+--------+-----------+--------+
| 235 | 1/3/2013 | 45 | 1/7/2013 | 48 |
| 235 | 4/6/2013 | 64 | 4/12/2013 | 73 |
| 462 | 1/4/2013 | 40 | 1/16/2013 | 50 |
+--------+----------+--------+-----------+--------+
我想构建一个连接查询,将A 中的每条记录链接到基于userID 的B 中的所有记录,其中A 在任一日期都包含B:
a.date1<=b.date1, a.date2>=b.date2
或 ID:
a.logID1<=b.logID1, a.logID2>=b.logID2
我想返回A中的所有记录,不管B中是否有包含区间。
乍一看,这似乎可行:
select * from a
left join b
on
a.userID=b.userID
where
(a.date1<=b.date1 or a.logID1<=b.logID1)
and
(a.date2>=b.date2 or a.logID2>=b.logID2)
or
b.userID is null
但问题是,如果A 中有一条记录在B 中有匹配的userID 但A 记录不包含B 记录,则会发生连接但记录会被 WHERE 条件过滤掉,所以A 记录不会出现在结果中。
如果我尝试通过将 WHERE 条件移至 JOIN 子句来解决此问题,如下所示:
select * from a
left join b
on
a.userID=b.userID
and
(a.date1<=b.date1 or a.logID1<=b.logID1)
and
(a.date2>=b.date2 or a.logID2>=b.logID2)
然后我收到此错误消息:
JOIN expression not supported.
我假设这意味着 Access 不能在 JOIN 条件中包含嵌套的 OR 条件。
我可以做些什么来返回A 的列表,并在适用的情况下加入到其中包含的B?
【问题讨论】:
标签: sql ms-access ms-access-2010