【问题标题】:How to join two tables with different ids?如何连接两个不同id的表?
【发布时间】:2019-04-08 07:02:18
【问题描述】:

很抱歉问题的标题有点令人困惑,但我只是找不到简单的方法来总结问题。让我们从一个例子开始。

有一个产品 A,我要监控 A 的两个特征 X 和 Y。X 每天生成,而 Y 每月生成。为了节省存储空间,我决定把 X、Y 放到两张表中,分别是 X 表和 Y 表。 所以表 X 有两列:日期和 X;表 Y 有两列:日期和 Y。但是,这两个表中的日期频率不同。我想左加入 X 上的两个表,但我需要用上个月的观察来填充 Y 中的缺失值。

表 X 是:

date                 X
----------      -------------
2019-01-01           1
2019-01-02           2
2019-01-02           3    
   ...              ...
2019-02-01           32
2019-02-02           33

表 Y 是:

date                 Y
----------      -------------
2019-01-01           0
2019-02-01           1

我要查询的表是:

date                 X              Y
----------      -------------   ----------
2019-01-01           1              0
2019-01-02           2              0
2019-01-02           3              0
   ...              ...            ...
2019-01-31           31             0
2019-02-01           32             1
2019-02-02           33             1

表 X:

Y 表:

我要查询的表:

【问题讨论】:

  • 这里的大多数人都希望样本表数据和预期结果为格式化文本,而不是图像或图像链接,
  • 谢谢你的提醒,我刚刚修改了我的问题。
  • 那么表 X 和 Y 中的日期格式究竟是什么?在您的图片中是 2019/1/1,在您的文字中是 2019-01-01。
  • 日期是日期时间类型的数据,不是字符串。

标签: mysql sql


【解决方案1】:

类似这样的:

SELECT x.date,
       x.x,
       y.y
FROM   x
JOIN   y
  ON   YEAR(x.date) = YEAR(y.date)
 AND   MONTH(x.date) = MONTH(y.date);

【讨论】:

  • 你可能需要一个外连接。
【解决方案2】:

右连接和 ORDER BY 应该这样做

SELECT x.date, x.X, y.Y
FROM X x
RIGHT JOIN Y y ON YEAR(x.date) = YEAR(y.date) AND MONTH(x.date) = MONTH(y.date)
ORDER BY x.date ASC

【讨论】:

    【解决方案3】:
    SELECT 
    a.Column1, 
    a.column2, 
    b.column3
    FROM tablename LEFT JOIN anothertable b
    ON a.column1 = b.column2;
    

    【讨论】:

    • 您能进一步解释一下吗?我没有在示例数据中看到这样命名的列
    • 嗯,仅供参考
    • 参考哪个?为了简单的加入?这如何处理“不同id”的要求?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多