根据下面的三个表,我将如何产生预期的结果?

Table 1

ID    Count A
-----------------
1           1
2           2

Table 2

ID    Count B
-----------------
1           3
3           4

Table 3

ID    Count C
-----------------
2           5
4           6

Result

ID    Count A    Count B    Count C
-----------------------------------
1           1          3 
2           2                     5
3                      4          
4                                 6

我试过

select a.id, a.count_a, b.count_b, c.count_c
from a
full outer join b
    on a.id = b.id
full outer join c  
    on a.id = c.id
    or b.id = c.id 

select id, count_a
from a
union
select id, count_b
from b
union
select id, count_c
from c  

但我意识到我不知道如何做一些看似简单的事情.

推荐答案

您的完全外部联接方法看起来是正确的.如果要使用联合方法,则必须对聚合使用旋转逻辑.

SELECT
    id,
    MAX(CASE WHEN src = 'a' THEN count END) AS "Count A",
    MAX(CASE WHEN src = 'b' THEN count END) AS "Count B",
    MAX(CASE WHEN src = 'c' THEN count END) AS "Count C"
FROM
(
    SELECT id, count_a AS count, 'a' AS src FROM a
    UNION ALL
    SELECT id, count_b, 'b' FROM b
    UNION ALL
    SELECT id, count_c, 'c' FROM c
) t
GROUP BY id
ORDER BY id;

screen capture from demo link below

演示

Sql相关问答推荐

为什么postgres中CURRENT_TIMESTAMP的日期与CURRENT_DATE不同?

从自定义日期和时间开始,每月具有给定状态的公司数量

仅 for each 唯一ID返回一个元素,并仅返回最新连接的记录

在Oracle中,如何删除具有特定值的行,仅当它是重复的行?

Access VBA SQL命令INSERT FOR MULTIME VALUE

如何更新SQLite数据库中的表?

防止ActiveRecord迁移在db/structure.sql中进行巨大更改

PostgreSQL:使用JSONB中的字段使用jsonb_to_Records()填充记录

数组列的postgres更新查询

带上最后日期(结果)

Oracle分层查询-两条路径在末尾合并为一条

带日期函数的复合索引不允许只扫描索引吗?

SQL将三个表中的三列组合为一列

统计PostgreSQL中前10个最大大小表的行数

Select 一个非零值减少重复

DbUp for sqlserver 在 dbo 授权下为非 dbo 用户创建架构

SQL 查询是否返回列表中仅包含某些值而不包含其他值的行?

每次计数器增加时通过运行总重置进行分组

如何在 ClickHouse SQL 中使用 CTE 将邻居语句中的数字作为偏移量传递?

具有日期时间条件的存储过程