【发布时间】:2017-03-20 19:13:54
【问题描述】:
我需要左连接两个带有 where 条件的表:
time_table
id rid start_date end_date
1 2 2017-07-01 00:00:00 2018-11-01 00:00:00
2 5 2017-01-01 00:00:00 2017-06-01 00:00:00
3 2 2018-07-01 00:00:00 2020-11-01 00:00:00
record_table
id name date
1 record1 2017-10-01 00:00:00
2 record2 2017-02-01 00:00:00
3 record3 2017-10-01 00:00:00
我需要获取在给定日期范围内存在的所有记录。在上面的示例中,我只需要那些位于rid = 2 范围内的记录。因此,上述查询的输出需要是:
1 record1 2017-10-01 00:00:00
3 record3 2017-10-01 00:00:00
【问题讨论】:
-
你试过什么?请发布一些示例代码和输出,并告诉我们什么不适合您。另外,请查看此链接:stackoverflow.com/help/mcve。
-
你用的是postgresql还是mysql?
-
您的输出示例不需要问题标题中的外连接。这是一个内部连接。
-
@ClodoaldoNeto:
LEFT JOIN可以显示来自time_table的行(或选定的列)与rid = 2匹配,即使record_table中没有行与时间重叠范围。否则,如果用户得到一个空结果(没有行),并且(s)他无法判断time_table(没有rid = 2)或record_table中是否没有匹配项。当然,在结果中包含start_date和end_date是有意义的,或者你只是得到后一种情况的一行NULL 值——这仍然很重要。 -
@ErwinBrandstetter:虽然可以使查询完成,但发布的输出示例并没有给出提示。 OP 提到了
left join,但这可能只是一些误解。在没有他的澄清的情况下,我倾向于更加重视所需的输出。我上面的评论是呼吁澄清,我应该说清楚。但恭喜您始终提供详细的答案。
标签: mysql sql postgresql left-join date-range