用于组合来自两个表的数据的 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 查询的主要内容,如果未能解决你的问题,请参考以下文章