【问题标题】:Union of two temporary tables两个临时表的并集
【发布时间】:2017-01-27 21:26:04
【问题描述】:

我有一个临时表a

"date"          "value"
"2016-09-09"    0.0533
"2016-09-12"    0.0552
"2016-09-14"    0.0567
"2016-09-15"    0.0537
"2016-09-19"    0.0529
"2016-09-19"    0.0506
"2016-09-19"    0.0525
"2016-09-20"    0.0517
"2016-09-20"    0.0534

还有一个临时表b,它给了我每周六的每周平均值

"date"          "avgValue"
"2016-09-10"    0.0533
"2016-09-17"    0.0552
"2016-09-24"    0.0522

日期几乎从不排列,但有时可能。我想做一个完整的外部连接,但 mysql 不允许。所以我一直在尝试各种联合和连接,在过去的 4 个小时里,问题一直困扰着我。我想要的表是这样的

"date"          "value"    "avgValue"
"2016-09-09"    0.0533      NULL
"2016-09-10"    NULL        0.0533
"2016-09-12"    0.0552      NULL
"2016-09-14"    0.0567      NULL
"2016-09-15"    0.0537      NULL
"2016-09-17"    NULL        0.0552
"2016-09-19"    0.0529      NULL
"2016-09-19"    0.0506      NULL
"2016-09-19"    0.0525      NULL
"2016-09-20"    0.0517      NULL
"2016-09-20"    0.0534      NULL
"2016-09-24"    NULL        0.0522

到目前为止,我有这个什么都不做。

select *
from a
left join b
on b.date = a.date
union
select *
from a
right join b
on b.date = a.date;

【问题讨论】:

    标签: mysql union temp-tables


    【解决方案1】:

    我建议使用union all/group by 方法:

    select date, max(value) as value, max(argvalue) as argvalue
    from ((select date, value asvalue, NULL as argvalue from a) union all
          (select date, NULL, argvalue from b)
         ) ab
    group by date;
    

    【讨论】:

    • 从他想要的输出来看,你不需要那个查询的外部部分。
    • 先生,您是圣人。我花了 4 个小时,您几乎立即解决了问题。您错过了 'as' 和 'value' 之间的空格并放置了 argvalue 而不是 avgvalue,但是一旦我更正了它,就立即起作用了。非常感谢。
    • @JaredPeterson - 戈登是大师。 :)
    • @MontyPython 我认为你是对的。他从字面上写了这本书。嗯,4本书。 晕倒
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-19
    • 2020-12-05
    • 1970-01-01
    • 1970-01-01
    • 2021-01-03
    • 2018-10-07
    相关资源
    最近更新 更多