Sql Teradata-两个表之间的联接-从第一个表获取值
假设我有接下来的两张桌子。在第一个例子中,我得到了最可信的信息。第二种方法的信息不太可靠。 其想法是创建第三个表,保存第一个表中的所有信息,并只添加第一个表中没有的字段 初始表Sql Teradata-两个表之间的联接-从第一个表获取值,sql,join,teradata,Sql,Join,Teradata,假设我有接下来的两张桌子。在第一个例子中,我得到了最可信的信息。第二种方法的信息不太可靠。 其想法是创建第三个表,保存第一个表中的所有信息,并只添加第一个表中没有的字段 初始表 user rank id_best 1 1 'A' 1 2 'P' 1 3 'E' 2 1 'Q' 2 2
user rank id_best
1 1 'A'
1 2 'P'
1 3 'E'
2 1 'Q'
2 2 'E'
3 1 'P'
3 2 'O'
3 3 'C'
中间表
user rank id_best
1 1 'B'
1 2 'D'
1 3 'R'
1 4 'Q'
1 5 'W'
2 1 'T'
2 2 'Y'
2 3 'S'
2 4 'Q'
2 5 'E'
3 1 'Y'
3 2 'E'
3 3 'S'
3 4 'A'
3 5 'T'
最终表格
user rank id_best
1 1 'A'
1 2 'P'
1 3 'E'
1 4 'Q'
1 5 'W'
2 1 'Q'
2 2 'E'
2 3 'S'
2 4 'Q'
2 5 'E'
3 1 'P'
3 2 'O'
3 3 'C'
3 4 'A'
3 5 'T'
这是一个优先级查询。一种方法使用
union all
逻辑,如下所示:
select o.*
from original o
union all
select i.*
from intermediate i
where not exists (select 1
from original o
where o.user = i.user and o.rank = i.rank
);
这是一个优先级查询。一种方法使用
union all
逻辑,如下所示:
select o.*
from original o
union all
select i.*
from intermediate i
where not exists (select 1
from original o
where o.user = i.user and o.rank = i.rank
);
#1使用OLAP功能的另一个解决方案:
select *
from
(
select 1 as flag, o.*
from original o
union all
select 2, i.*
from intermediate i
) as dt
qualify
row_number()
over (partition by user, rank
order by flag) = 1 --prefer table 1 over table 2
#2如果user/rank
在至少一个表中是唯一的,则您还可以执行完全外部联接
:
select
coalesce(o.user, i.user),
coalesce(o.rank, i.rank),
coalesce(o.id_best, i.id_best)
from original o
full join intermediate i
on o.user = i.user
and o.rank = i.rank
如果user/rank
是两个表中的主要索引,那么这将非常好地执行。当两个表都有不同的列时也可以使用
#3如果确实要创建第三个表,还可以复制初始表,然后将其合并到中间表。\1使用OLAP函数的另一个解决方案:
select *
from
(
select 1 as flag, o.*
from original o
union all
select 2, i.*
from intermediate i
) as dt
qualify
row_number()
over (partition by user, rank
order by flag) = 1 --prefer table 1 over table 2
#2如果user/rank
在至少一个表中是唯一的,则您还可以执行完全外部联接
:
select
coalesce(o.user, i.user),
coalesce(o.rank, i.rank),
coalesce(o.id_best, i.id_best)
from original o
full join intermediate i
on o.user = i.user
and o.rank = i.rank
如果user/rank
是两个表中的主要索引,那么这将非常好地执行。当两个表都有不同的列时也可以使用
#3如果您确实想要创建第三个表,您也可以复制初始表,然后合并中间表。您是否可以显示您的代码并指出您的问题所在?您是否考虑过混合交易和分析平台(HTAP)例如,TigerGraph提供了一种更简单、更具表现力的OLAP方法?您能否显示您的代码并指出您的问题所在?您是否考虑过交易和分析平台(HTAP)的混合应用,例如TigerGraph提供了一种更简单、更具表现力的OLAP方法?