【问题标题】:How to add 2 temporary tables together如何将2个临时表添加在一起
【发布时间】:2011-03-15 13:20:37
【问题描述】:

如果我正在创建具有 2 列的临时表。 idscore。我想把它们加在一起。

我想添加它们的方式是,如果它们每个都包含相同的id,那么我不想复制id,而是将分数加在一起。

如果我有 2 个名为 t1t2 的临时表

t1 有:

id 3 score 4
id 6 score 7

t2 有:

id 3 score 5
id 5 score 2

我最终会得到一个新的临时表,其中包含:

id 3 score 9
id 5 score 2
id 6 score 7

我想这样做的原因是,我正在尝试构建产品搜索。我有一些我想使用的算法,1 使用全文另一种不使用。我想同时使用这两种算法,所以我想创建一个基于 algorithm1 的临时表和一个基于 algorithm2 的临时表。然后将它们组合起来。

【问题讨论】:

    标签: sql mysql temp-tables


    【解决方案1】:

    怎么样:

    SELECT id, SUM(score) AS score FROM (
      SELECT id, score FROM t1
      UNION ALL
      SELECT id, score FROM t2
    ) t3
    GROUP BY id
    

    【讨论】:

    • 您需要为嵌套选择添加别名,但括号中有错误
    • @Brendan:你的语法是对的,但汤姆的 UNION 是对的。进行团队合作!
    • 是的,系统可以工作,但是谁应该得到接受的答案!?!?
    • @Brendan 系统并没有真正工作——你的答案是获得赞成票 :-)
    • @Brendan 你是个绅士。谢谢。
    【解决方案2】:

    这是未经测试的,但您应该能够对两个表执行并集,然后对结果执行选择,对字段进行分组并添加分数

    SELECT id,SUM(score) FROM
    (
        SELECT id,score FROM t1
        UNION ALL
        SELECT id,score FROM t2
    ) joined
    GROUP BY id
    

    【讨论】:

    • 您必须使用 UNION ALL 以防 t1 和 t2 中存在具有相同 id 和分数的条目。
    【解决方案3】:

    对 ID 执行完全外部联接。将值合并为 0 后,选择 ID 和两个“分数”列的总和。

    【讨论】:

    • 正确 - 除了我认为 MySQL 不支持完全外连接。你必须联合一个右连接和一个左连接。
    【解决方案4】:
    SELECT id, SUM(score) FROM
    (
        SELECT id, score FROM #t1
        UNION ALL
        SELECT id, score FROM #t2
    ) AS Temp
    GROUP BY id
    

    【讨论】:

      【解决方案5】:
      select id, sum(score)
      from (
       select * from table 1
       union all
       select * from table2
      ) tables
      group by id
      

      【讨论】:

      • 嗯,你们很快……但我的是正确的。 Brendan,您需要使用 UNION ALL 汤姆,您会遇到语法错误,您需要为子查询设置别名
      • 您突出显示代码,然后单击看起来像二进制代码的按钮。
      【解决方案6】:

      您需要创建这两个表的联合,然后您可以轻松地对结果进行分组。

      SELECT id, sum(score) FROM 
      
      (
       SELECT id, score FROM t1
       UNION 
       SELECT id, score FROM t2
      ) as tmp
      GROUP BY id;
      

      【讨论】:

        猜你喜欢
        • 2012-05-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多