Sql 避免重复的完全联接表
我有两个单独的表格,如下所示:Sql 避免重复的完全联接表,sql,amazon-redshift,Sql,Amazon Redshift,我有两个单独的表格,如下所示: t1 major math biology 1 ann n/a 1 n/a rosa 2 n/a tim t2 major english 2 elias 3 tony 我的目标是将它们与所需的输出合并,如下所示(每行只
t1
major math biology
1 ann n/a
1 n/a rosa
2 n/a tim
t2
major english
2 elias
3 tony
我的目标是将它们与所需的输出合并,如下所示(每行只能有一个数学、生物学和英语名称):
我尝试执行完全联接,然后执行合并语句,但不起作用,t2中的所有名称都是重复的:
SELECT COALESCE(t1.major, t2.major) AS major,
COALESCE(t1.math, 'n/a') AS math,
COALESCE(t1.biology, 'n/a') AS biology,
COALESCE(t2.english, 'n/a') AS english
FROM t1
FULL JOIN t2 ON t2.major = t1.major
我仍在学习SQL,因此如果您能给我一个如何解决此问题的建议,我将不胜感激。您问题的字面答案似乎是使用
UNION ALL
SELECT major, math, biology, 'n/a' AS english FROM t1
UNION ALL
SELECT major, 'n/a', 'n/a', english FROM t2
更好的答案是指出您的数据结构存在极大的问题。如果你详细介绍一下为什么你的数据看起来像这样,以及你想用它做什么,我们可以指出一个更合适的结构。你问题的字面答案似乎是使用
联合所有
SELECT major, math, biology, 'n/a' AS english FROM t1
UNION ALL
SELECT major, 'n/a', 'n/a', english FROM t2
更好的答案是指出您的数据结构存在极大的问题。如果你详细介绍一下为什么你的数据看起来像这样,以及你想用它做什么,我们可以指出一个更合适的结构。我认为你需要的是联合,而不是联合:
select major, math, biology, 'n/a'
from t1
union
select major, 'n/a', 'n/a', english
from t2
我认为你需要的是工会,而不是加入:
select major, math, biology, 'n/a'
from t1
union
select major, 'n/a', 'n/a', english
from t2
非常感谢,它成功了。我知道数据结构有很多问题,但在1列中只能有1个值,其他列将有null或n/a值,到目前为止,这就是我想到的结构。。鉴于上述示例,每个人都是唯一的,他/她只会出现一次(在一行和一列中)。@tlqn那么你应该有两列<代码>名称,主题,不是每个主题都有一列。非常感谢您的帮助。我知道数据结构有很多问题,但在1列中只能有1个值,其他列将有null或n/a值,到目前为止,这就是我想到的结构。。鉴于上述示例,每个人都是唯一的,他/她只会出现一次(在一行和一列中)。@tlqn那么你应该有两列<代码>名称,主题,每个主题不包含一列。
UNION
运行重复数据消除。除非明确要求,否则它应该是UNION ALL
,以避免(可能非常昂贵的)开销。UNION
运行重复数据消除。除非明确要求,否则它应该是UNION ALL
,以避免(可能非常昂贵的)开销。