用于组合来自两个表的数据的 SQL 查询

Posted

技术标签:

【中文标题】用于组合来自两个表的数据的 SQL 查询【英文标题】:SQL query for combining data from two tables 【发布时间】:2020-12-22 18:26:47 【问题描述】:

我想合并两个不同表中的数据,它们彼此之间没有实际关系,因此我不能使用 JOIN。表结构如下:

冰淇淋

总计 广告商 提供者 供应商

零食

总计 广告商 提供者 供应商

我想运行一个查询,生成一个包含以下内容的表: ice_creams_total、snacks_total、广告商、供应商、供应商

我可以通过运行分别为每个表实现:

SELECT SUM(total) AS ice_creams_total,
       advertiser AS "advertiser::filter",
       provider AS "provider::filter",
       supplier AS "supplier::multi-filter"
FROM ice_creams
WHERE time >= now() - toIntervalHour(96)
GROUP BY integration_id,
         advertiser,
         provider,
         supplier
ORDER BY integration_id ASC,
    ice_creams_total DESC

我可以对两个表都执行此操作,并结合结果吗?

【问题讨论】:

嗯...这里有三种关系:广告商、供应商、供应商。 integration_id 是什么?它来自哪里? 【参考方案1】:

您可以使用union all。这是一种方法:

SELECT SUM(ice_cream_total) AS ice_creams_total,
       SUM(snaks_total) as snacks_total,
       advertiser AS "advertiser::filter", provider AS "provider::filter", supplier AS "supplier::multi-filter"
FROM ((SELECT ice_cream_total, 0 as snacks_total, integration_id, advertiser, provider, supplier
       FROM ice_creams ic
      ) UNION ALL
      (SELECT 0, total, integration_id, advertiser, provider, supplier
       FROM snacks s
      )
     ) x
WHERE time >= now() - toIntervalHour(96)
GROUP BY integration_id, advertiser, provider, supplier
ORDER BY integration_id ASC, ice_creams_total DESC

【讨论】:

【参考方案2】:

如果 SELECT 列匹配,您可以使用 union all 组合 2 个查询的结果。因此考虑将名称ice_creams_total 更改为total(同样将snacks_total 更改为total)并为2 个查询添加一个额外的手动字段type。 例如。

SELECT 'ice_creams' type,
...
UNION ALL
SELECT 'snacks' type,
...

查看更多:mysql - Concatenate two tables 另见:https://www.techonthenet.com/mysql/union_all.php

【讨论】:

以上是关于用于组合来自两个表的数据的 SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章

组合来自 2 个单独的 SQL 表的列数据

在sql中组合来自不同表的数据

数据库力扣题组合两个表

用于合并来自同一个表的两个聚合子集的 SQL 查询

SQL 查询 - 组合两个表,删除重复项并仅保留最新的日期

如何编写猫鼬查询来组合来自两个模型的数据?