Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 避免重复的完全联接表_Sql_Amazon Redshift - Fatal编程技术网

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
,以避免(可能非常昂贵的)开销。