红移中的完全外连接

Posted

技术标签:

【中文标题】红移中的完全外连接【英文标题】:full outer join in redshift 【发布时间】:2022-01-16 22:34:04 【问题描述】:

我有 2 个表 A 和 B 的列,包含学生的一些详细信息(所有列都是整数): 答: st_id, st_subject_id,

乙: st_id, st_subject_id, st_count1, st_count2

st_id 是学生编号,st_subject_id 是科目编号。 对于学生 id 15,有以下条目: 答: 15 | 1 15 | 2 15 | 3 乙: 15 | 1 | 31 | 11 15 | 2 | 30 | 14 15 | 4 | 21 | 6 15 | 5 | 26 | 9 A表3个科目,B表4个科目(2个与A表匹配,2个额外)。

我想将最终结果显示为: 15 | 1 | 31 | 11 15 | 2 | 30 | 14 15 | 3 |空 |空 15 | 4 | 21 | 6 15 | 5 | 26 | 9

这可以使用 SQL 中的完全外连接来完成,还是通过其他方法来完成?

【问题讨论】:

外部连接会很好 - 是什么阻止了你? @Bashton 在编写完整的外连接时,我们需要在选择中给出列名。但是对于某些条目,我需要包括表 A 中的 st_id、st_subject_id ,有时还包括 B 中的。我应该如何在 select 语句中传递这些列?你能写一个示例查询吗?这真的很有帮助。 【参考方案1】:

我认为这样的事情就足够了,但我现在无法测试。 合并意味着将从两个表中选择第一个非空值。

select
coalesce(A.st_id, B.st_id) st_id,
coalesce(A.st_subject_id, B.st_subject_id) st_subject_id,
B.st_count1,
B.st_count2

from A

full outer join B
on A.st_id = B.st_id and A.st_subject_id = B.st_subject_id

【讨论】:

非常感谢@Bashton!使用合并完全解决了我的问题。 别担心!很高兴它有帮助:)

以上是关于红移中的完全外连接的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在红移中使用 CONCAT(table_name(col1, col2, col3,.....)) 连接可变数量的列?

亚马逊红移中的 SQL 正则表达式 substr 函数

亚马逊红移中的上次更新查询计数

红移中的 juliandate 到 normaldate

mySQL 中的完全外连接计数

红移中的 PERCENTILE_CONT()