【问题标题】:Joining two tables and merging the common columns in mysql连接两个表并合并mysql中的公共列
【发布时间】:2019-05-06 02:41:26
【问题描述】:

我有 2 个 mysql 表:

t1 with columns as follows:
customer, datetime, products1
t2 with columns as follows:
customer, datetime, products2
t1: customer  datetime             products1  country
    111       2018-11-23 01:12:33    p1         A
    111       2018-11-23 01:13:00    p2         A   
    112       2018-11-23 01:12:12    p1         B
    112       2018-11-23 01:15:10    p3         B


t2: customer  datetime             products2
    111       2018-11-23 01:12:40    q1
    111       2018-11-23 01:13:00    q2
    112       2018-11-23 01:12:10    q1
    112       2018-11-23 01:15:20    q3

我想同时加入 mysql 的执行和外部加入,并且只获得 1 个日期时间、1 个客户并合并两个产品,最后按日期时间订购。所以我想要这样的东西:

 customer         datetime              products    country
  112             2018-11-23 01:12:10     q1          NULL
  112             2018-11-23 01:12:12     p1          B
  111             2018-11-23 01:12:33     p1          A
  111             2018-11-23 01:12:40     q1          NULL
  111             2018-11-23 01:13:00     p2          A
  111             2018-11-23 01:13:00     q2          NULL
  112             2018-11-23 01:15:10     p3          B
  111             2018-11-23 01:13:00     q2          NULL

我只是想知道如何将两个日期时间合并为一个相同的产品。

【问题讨论】:

    标签: mysql datetime join outer-join


    【解决方案1】:

    由于两个表之间没有公共数据,我认为您需要UNION,而不是MERGE。试试这个:

    SELECT
      customer,
      datetime,
      products1 as products,
      country
    FROM t1
    UNION
    SELECT
      customer,
      datetime,
      products2 as products,
      null as country
    FROM t2
    

    【讨论】:

    • 您的解决方案运行良好,但联合速度太慢,尽管客户和日期时间已编入索引。有什么加快速度的建议吗?
    • 没有WHERE 子句的SELECT 是您可以进行的最简单的查询,因此任何改进都可能来自调整您的mysql 环境,而不是改进查询。在这里查看一些想法:dev.mysql.com/doc/refman/5.5/en/select-optimization.html
    猜你喜欢
    • 1970-01-01
    • 2012-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-06
    • 2017-02-09
    相关资源
    最近更新 更多