加入 / union in presto 以将电子邮件保留在一栏中

join / union in presto to keep email in one column

我正在尝试快速将两个表连接在一起,

select o.email
, o.user_id
, c.email
, c.sessions
from datasource o
full join datasource2 c
on o.email = c.email

这产生:

email                user_id     email            sessions
jeff@sessions.com    123         NULL             NULL
mike@berkley.com     987         NULL             NULL
jared@swiss.com      384         jared@swiss.com  14
steph@berk.com       333         NULL             NULL
NULL                 NULL        lisa@hart.com    12

这个问题是我想使用 email 对多个数据源进行多个连接,我能想到的唯一解决方法是将其用作子查询,并创建一个新列一个,如果为空,则取另一个,然后对 datasource3 执行完全连接,冲洗重复。

您想使用 COALESCE,它将选择两个值中的非空值。 COALESCE 对于很多事情都非常有用。它可以接受两个以上的值,并将 return 它获得的第一个非 NULL 值。如果所有这些都是 NULL,它将简单地 return NULL.

SELECT 
  COALLESCE(o.email, c.email) AS email
  , o.user_id
  , c.sessions
FROM datasource o
FULL JOIN datasource2 c
ON o.email = c.email

有关 COALESCE 的官方文档,请参见此处: https://prestodb.io/docs/current/functions/conditional.html