SQL 情况下 (SELECT...) 然后
SQL CASE WHEN IN (SELECT...) THEN
我不是sql方面的专家,但我没有发现类似的问题,也许是太明显了...
所以这是我的问题:
我有几个带有合同 ID 的临时视图,例如 'contract_ids_canceled' 或 'contract_ids_changed_date'。我有一个很大的 table,里面有所有这些合同 ID 等等。
现在我想在新专栏中对它们进行分类 'tag'。我尝试了以下方法:
CASE WHEN contractid in (SELECT DISTINCT contractid FROM contract_ids_canceled) THEN 'contract canceled'
WHEN contractid in (SELECT blabla) THEN 'contract changed'
END as updates
但我收到以下错误消息
Error in SQL statement: AnalysisException: IN/EXISTS predicate sub-queries can only be used in Filter/Join and a few commands:
如果我使用类似
的东西
IN (1,2,3)
然后 IN 起作用了,所以我有点迷茫为什么 CASE 中的 SELECT 语句不起作用以及关于错误消息...如果有人能在这里帮助我就太好了!
Databricks SQL.
如错误所示,Databricks 不支持在 CASE
语句中使用 IN
或 EXISTS
的子查询。作为替代方案,考虑将每个视图外部连接到主合同 table:
SELECT m.contractid,
CASE
WHEN cncl.contractid IS NOT NULL
THEN 'contract canceled'
WHEN dt.contractid IS NOT NULL
THEN 'contract date changed'
END AS contract_status
FROM master_contracts m
LEFT JOIN (
SELECT DISTINCT contractid
FROM contract_ids_canceled
) cncl
ON m.contractid = cncl.contractid
LEFT JOIN (
SELECT DISTINCT contractid
FROM contract_ids_changed_date
) dt
ON m.contractid = dt.contractid
我不是sql方面的专家,但我没有发现类似的问题,也许是太明显了... 所以这是我的问题:
我有几个带有合同 ID 的临时视图,例如 'contract_ids_canceled' 或 'contract_ids_changed_date'。我有一个很大的 table,里面有所有这些合同 ID 等等。 现在我想在新专栏中对它们进行分类 'tag'。我尝试了以下方法:
CASE WHEN contractid in (SELECT DISTINCT contractid FROM contract_ids_canceled) THEN 'contract canceled'
WHEN contractid in (SELECT blabla) THEN 'contract changed'
END as updates
但我收到以下错误消息
Error in SQL statement: AnalysisException: IN/EXISTS predicate sub-queries can only be used in Filter/Join and a few commands:
如果我使用类似
的东西IN (1,2,3)
然后 IN 起作用了,所以我有点迷茫为什么 CASE 中的 SELECT 语句不起作用以及关于错误消息...如果有人能在这里帮助我就太好了!
Databricks SQL.
如错误所示,Databricks 不支持在 CASE
语句中使用 IN
或 EXISTS
的子查询。作为替代方案,考虑将每个视图外部连接到主合同 table:
SELECT m.contractid,
CASE
WHEN cncl.contractid IS NOT NULL
THEN 'contract canceled'
WHEN dt.contractid IS NOT NULL
THEN 'contract date changed'
END AS contract_status
FROM master_contracts m
LEFT JOIN (
SELECT DISTINCT contractid
FROM contract_ids_canceled
) cncl
ON m.contractid = cncl.contractid
LEFT JOIN (
SELECT DISTINCT contractid
FROM contract_ids_changed_date
) dt
ON m.contractid = dt.contractid