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

SQL Server多父子层级表新增(Value,NULL)行的问题求助

问题根因

你的写法存在3个核心问题,直接导致结果不符合预期:

  1. 逐行生成待插入值的逻辑错误:原语句会对原表的每一行记录都生成一个待插入值,CASE判断不通过时返回NULL,因此会生成和原表行数一致的(NULL,NULL)待插入行,最终出现大量无效空行。
  2. 未对Parent值去重:同一个Parent值可能在表中重复出现,就算逻辑正确也会插入多条重复的(值,NULL)行。
  3. NOT IN的NULL值陷阱:如果Child列存在NULL值,NOT IN (子查询)的判断结果会永远为UNKNOWN,所有CASE分支都不会命中返回Parent,这是你没有得到任何符合要求的插入行的核心原因。
修复方案

使用更安全的NOT EXISTS逻辑搭配DISTINCT去重实现需求,写法如下:

INSERT INTO #table (Child, Parent)
SELECT DISTINCT t.Parent, NULL
FROM #table t
WHERE NOT EXISTS (
    SELECT 1 FROM #table t2 WHERE t2.Child = t.Parent
)

该写法逻辑:

  • 先通过DISTINCT获取所有唯一的Parent值,避免重复插入
  • 用NOT EXISTS判断当前Parent是否不存在于Child列,不受Child列NULL值的影响,逻辑稳定性更高
  • 只有符合要求的Parent值才会生成待插入行,不会产生多余的NULL记录
    代入你提供的示例数据执行后,会正确插入(3,NULL)行,符合预期效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 05:06:04