【发布时间】:2019-04-24 19:08:23
【问题描述】:
我正在尝试加入两个表。表中存在一列,但另一列是派生列。
event_date - exists directly in the table
deploy_date - derived using case statement
参见原始查询中的第 6 行。
1 SELECT ab.id,
2 ab.event_date,
3 CASE
4 WHEN ab.label = 'ABC' THEN ab.event_date
5 WHEN ab.label = 'DEF' THEN ab.start_date
6 END deploy_date,
7 FROM ab_bro AB
8 LEFT JOIN ab_rev rv
9 ON ab.bro_id = rv.bro_id
10 AND ab.event_date = rv.event_date
现在我想在第 10 行(上图)中使用 deploy_date 而不是 event_date
由于sql不允许在join中使用别名,所以我尝试使用子查询
SELECT ab.id,
ab.event_date,
CASE
WHEN ab.label = 'ABC' THEN ab.event_date
WHEN ab.label = 'DEF' THEN ab.start_date
END deploy_date,
FROM ab_bro AB
LEFT JOIN ab_rev rv
ON ab.bro_id = rv.bro_id
AND
(
SELECT
CASE
WHEN AC.label = 'ABC' THEN AC.event_date
WHEN AC.label = 'DEF' THEN AC.start_date
END deploy_date from ab_bro AC) = rv.event_date
我的错误 -
错误:用作表达式的子查询返回多于一行
我知道我的子查询确实返回了不止一行,但我不知道如何解决这个问题。
【问题讨论】:
-
这看起来很奇怪。如果在
CASE之前删除SELECT,是否还会出现同样的错误? -
@GordonLinoff 导致语法错误
-
@a_horse_with_no_name 它是 Greenplum。我修复了标签。由于 GP 是基于 Postgres 之上的,我认为它会有类似的语法
-
@PirateX 去掉
from ab_bro AC和SELECT就不需要子查询了,只需要 CASE 表达式。 -
@JNevill 原来我错过了 case 语句的 END。我想我需要休息一下。非常感谢!!
标签: sql join subquery greenplum