【发布时间】:2021-06-16 15:26:55
【问题描述】:
我有两个表 A 和 B。A 有 X 和 Y 列。B 有 X 和 Z 列
在左边将 A 连接到 B 中,一些 Y 将具有值,而另一些则没有
如果 Y 有值,有什么方法可以给 A 添加一个标志?
相当于
选择(如果Y不为空则为1否则为0)作为标志,X,Y从A左连接B
【问题讨论】:
标签: sql amazon-athena presto
我有两个表 A 和 B。A 有 X 和 Y 列。B 有 X 和 Z 列
在左边将 A 连接到 B 中,一些 Y 将具有值,而另一些则没有
如果 Y 有值,有什么方法可以给 A 添加一个标志?
相当于
选择(如果Y不为空则为1否则为0)作为标志,X,Y从A左连接B
【问题讨论】:
标签: sql amazon-athena presto
我不确定表中的标志是什么意思,但是,以下查询使用 coalesce 为您提供来自 JOIN 的值或否则不同的值
WITH A AS
(SELECT '0001' as X, '2020-01-01' as Y UNION ALL
SELECT '0002', '2020-01-02' UNION ALL
SELECT '0003', '2020-01-03'),
B as
(SELECT '0001' as X, 'YES' as Z UNION ALL
SELECT '0003', 'YES')
select A.X, Y, coalesce(Z,'NO') as flag from A left join B on A.X = B.X
输出是
| X | Y | flag |
|---|---|---|
| 0002 | 2020-01-02 | NO |
| 0001 | 2020-01-01 | YES |
| 0003 | 2020-01-03 | YES |
【讨论】:
我想你想要一个EXISTS 支票:
select a.*,
(case when exists (select 1 from b where b.x = a.x)
then 'yes' else 'no'
end) as flag
from a;
我不推荐LEFT JOIN,因为如果有重复,那会成倍增加行数。
【讨论】: