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

SQL查询TYPE字段NULL问题求助:FINE_ID为空时默认赋值legislative court

问题原因

当c.FINE_ID为NULL时,子查询的WHERE c.FINE_ID = FINE_ID条件等价于NULL = FINE_ID,SQL中NULL与任何值比较的结果都是UNKNOWN,因此子查询不会返回任何行,最终TYPE字段直接取NULL,子查询内部的CASE语句根本不会执行,这就是你遇到的问题。

解决方案

有两种简洁的修复方式:

方式1:用ISNULL/COALESCE包裹子查询

直接在子查询外层用ISNULL(适用于SQL Server)或COALESCE(通用SQL标准),当子查询返回NULL时,自动替换为'legislative court':

SELECT 
    c.COURT_ID, 
    ci.BODY_TEXT,
    TYPE = ISNULL(
        (
            SELECT 
                CASE 
                    WHEN DESCRIPTION = 'Courts of Appeals' THEN 'appellate court'
                    WHEN DESCRIPTION = 'District Courts' THEN 'special trial court'
                    ELSE DESCRIPTION
                END
            FROM [STAGING].COURT_LOCATION
            WHERE c.FINE_ID = FINE_ID
        ), 
        'legislative court'
    )
FROM [STAGING].[COURT] c
LEFT OUTER JOIN [STAGING].COURT_INFO ci ON c.COURT_ID = ci.COURT_ID

方式2:改用LEFT JOIN替代子查询

这种方式逻辑更直观,还能避免子查询可能带来的性能问题:

SELECT 
    c.COURT_ID, 
    ci.BODY_TEXT,
    TYPE = CASE 
        WHEN cl.DESCRIPTION = 'Courts of Appeals' THEN 'appellate court'
        WHEN cl.DESCRIPTION = 'District Courts' THEN 'special trial court'
        WHEN cl.DESCRIPTION IS NULL OR c.FINE_ID IS NULL THEN 'legislative court'
        ELSE cl.DESCRIPTION
    END
FROM [STAGING].[COURT] c
LEFT OUTER JOIN [STAGING].COURT_INFO ci ON c.COURT_ID = ci.COURT_ID
LEFT JOIN [STAGING].COURT_LOCATION cl ON c.FINE_ID = cl.FINE_ID
说明

方式2中,LEFT JOIN会保留COURT表的所有行,即使没有匹配的COURT_LOCATION记录(此时cl.DESCRIPTION为NULL),CASE语句能正常捕获这种情况并设置默认值,完美满足你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 14:47:27