You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何改写可在SQL Server运行的SQL代码使其兼容Apache Spark SQL?

解决方案

Spark SQL不允许在CASE WHEN的条件分支中使用IN/EXISTS子查询,这类子查询仅支持用于WHERE过滤或JOIN关联条件里。针对你的需求,我们可以将原查询中IN子查询的逻辑提取出来,通过LEFT JOIN的方式实现等价逻辑:

SELECT 
    t2.*,
    CASE 
        WHEN t2.ACode <> t2.ACity AND t6.BCode IS NOT NULL 
        THEN 1 ELSE 0 
    END AS CityRisk
FROM Table1 t2
LEFT JOIN (
    -- 预先提取符合条件的风险编码集合
    SELECT DISTINCT BCode 
    FROM RiskTable 
    WHERE Risklevel = 'Except'
) t6 ON t2.ACode = t6.BCode
WHERE t2.message = 4

改写说明

  1. 把原IN子查询单独提取为一个子查询t6,只保留Risklevel = 'Except'的唯一BCode值
  2. 通过LEFT JOIN将Table1和这个风险编码集合关联,关联条件为ACode = BCode
  3. 在CASE WHEN中,用t6.BCode IS NOT NULL替代原IN子查询的判断逻辑,同时保留ACode <> ACity的条件,实现和原查询完全一致的业务逻辑

这样改写后的SQL可以在Apache Spark SQL中正常执行,同时保持原有的功能不变。

内容的提问来源于stack exchange,提问作者Mikee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 00:06:25