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 语句中使用 INEXISTS 的子查询。作为替代方案,考虑将每个视图外部连接到主合同 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