【问题标题】:MySQL - Join Based on DateMySQL - 基于日期的加入
【发布时间】:2010-12-08 18:38:57
【问题描述】:

是否可以基于同一日期连接两个表,而不考虑时间?

类似:

...FROM 约会 LEFT JOIN sales ON 约会.日期 = 销售.日期...

唯一的问题是它是一个日期时间字段,所以我想确保它只查看日期而忽略时间

【问题讨论】:

标签: sql mysql datetime join


【解决方案1】:

你可以这样做:

FROM appointments
LEFT JOIN sales ON DATE(appointments.date) = DATE(sales.date)

但我很确定它不能使用索引,所以会很慢。

最好为每个表添加一个日期列。

【讨论】:

    【解决方案2】:

    ON 子句接受任意条件表达式,因此您可以在比较之前在双方执行日期规范化,但它应该代表显着的性能损失。

    【讨论】:

      【解决方案3】:

      是的,但您必须加入一个计算表达式,该表达式从日期时间列值中去除时间。这将使查询成为非 SARGable(它不能使用索引),因此它将生成表扫描...

      我不知道 mysql 中从 datetime 值中剥离时间的语法,但不管是什么,只要写

         FROM appointments a 
            LEFT JOIN sales s 
               ON StripTime(s.date) = StripTime(a.date)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-02-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-11
        • 1970-01-01
        • 2018-11-19
        相关资源
        最近更新 更多