我试图基于某些列在指定的时间范围内连接表.我已经尝试了几种方法并且无法解决这个问题.
我从一个简单的查询开始:
SELECT *
FROM admin.mktdmtunit c
WHERE c.unitid IN ('2756')
AND c.calledofftime between to_timestamp('2012-12-05 05:00:01','yyyy-mm-dd hh:mi:ss')
AND to_timestamp('2012-12-06 05:00:00','yyyy-mm-dd hh:mi:ss')
Run Code Online (Sandbox Code Playgroud)
返回1行.
然后我添加另一个表:
SELECT *
FROM admin.mktdmtunit c
INNER JOIN admin.mktmanualdispatch_all mrd
ON c.unitid = mrd.unitid
where c.unitid in ('2756')
AND (c.calledofftime between to_timestamp('2012-12-05 05:00:01','yyyy-mm-dd hh:mi:ss')
and to_timestamp('2012-12-06 05:00:00','yyyy-mm-dd hh:mi:ss')
OR mrd.effectivetime between to_timestamp('2012-12-05 05:00:01','yyyy-mm-dd hh:mi:ss')
and to_timestamp('2012-12-06 05:00:00','yyyy-mm-dd hh:mi:ss'))
Run Code Online (Sandbox Code Playgroud)
返回4行,基于mrd表中4个条目的unitid.但这些都与那个日期无关,所以我不希望看到这些信息.
所以我尝试了这个:
SELECT *
FROM admin.mktdmtunit c
where c.unitid in ('2756')
AND c.calledofftime between to_timestamp('2012-12-05 05:00:01','yyyy-mm-dd hh:mi:ss')
and to_timestamp('2012-12-06 05:00:00','yyyy-mm-dd hh:mi:ss')
OR (exists(SELECT mrd.effectivetime
FROM admin.mktmanualdispatch_all mrd
WHERE mrd.effectivetime between to_timestamp('2012-12-05 05:00:01','yyyy-mm-dd hh:mi:ss')
and to_timestamp('2012-12-06 05:00:00','yyyy-mm-dd hh:mi:ss')
AND c.unitid = mrd.unitid)
Run Code Online (Sandbox Code Playgroud)
但这会给出一个错误,说它在最后一行的"mrd.unitid"之前需要一个",".
所以我也试过这个:
SELECT *
FROM admin.mktdmtunit c
INNER JOIN admin.mktmanualdispatch_all mrd
ON
mrd.effectivetime between to_timestamp('2012-12-05 05:00:01','yyyy-mm-dd hh:mi:ss')
and to_timestamp('2012-12-06 05:00:00','yyyy-mm-dd hh:mi:ss')
AND c.unitid = mrd.unitid
where c.unitid in ('2756')
AND c.calledofftime between to_timestamp('2012-12-05 05:00:01','yyyy-mm-dd hh:mi:ss')
and to_timestamp('2012-12-06 05:00:00','yyyy-mm-dd hh:mi:ss')
Run Code Online (Sandbox Code Playgroud)
但这不会返回任何行.
所以要明确的是,我想从这个特定查询中得到的是1行,其中包含基于c.calledofftime的信息,并且没有从其他表中提取的信息,因为没有基于mrd.effective时间的相关数据.谢谢
发帖者已经回答了这个问题,但是,是的,左连接第二个表并在连接逻辑中包含 mrd. effectivetime 标准,这样如果不存在,您将收到 NULL。这将允许您维护主表中的核心信息。
| 归档时间: |
|
| 查看次数: |
8668 次 |
| 最近记录: |