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

跨行筛选SQL语句求助:获取满足多条件的目标ID

搞定你的跨行SQL筛选问题

嘿,我一眼就看出问题出在哪了——你写的那个条件(sEbene2 IN ('Test2') AND sEbene2 IS NULL)完全是逻辑矛盾的啊!一个字段怎么可能同时等于'Test2'又是NULL呢?这就难怪没返回结果了😅

先理清楚你的真实需求

你原来的SQL返回了ID=10004和10005,但你只想要10005。结合原语句的逻辑猜一下:10004的sEbene2应该是NULL,而10005的sEbene2是'Test2',对吧?那你真正想要的应该是:

  • sEbene1必须是'Test1'
  • sEbene2必须是'Test2'(把那些sEbene2为NULL的记录排除掉)
  • sEbene3必须是NULL

修正后的SQL语句

把那个矛盾的条件改成直接指定sEbene2的取值就行,看下面的代码:

SELECT SZ.Stammindex AS ID, S.sEbene1, S.sEbene2, S.sEbene3 
FROM SuchbaumZuordnung SZ 
LEFT JOIN Suchbaum S ON SZ.gSuchbaumID = S.gID 
WHERE S.sEbene1 IN ('Test1') 
  AND S.sEbene2 IN ('Test2') 
  AND S.sEbene3 IS NULL;

要是你其实是想找同时存在sEbene2='Test2'和sEbene2 IS NULL记录的ID(不过从你的描述看应该不是,但还是给你补充这种情况),那就得用分组加HAVING来判断:

SELECT SZ.Stammindex AS ID
FROM SuchbaumZuordnung SZ 
LEFT JOIN Suchbaum S ON SZ.gSuchbaumID = S.gID 
WHERE S.sEbene1 IN ('Test1') 
  AND S.sEbene3 IS NULL
GROUP BY SZ.Stammindex
HAVING SUM(CASE WHEN S.sEbene2 = 'Test2' THEN 1 ELSE 0 END) > 0
   AND SUM(CASE WHEN S.sEbene2 IS NULL THEN 1 ELSE 0 END) > 0;

但根据你说的只需要ID=10005,第一个修正后的语句肯定就是你要的啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 13:08:11