跨行筛选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
相关产品推荐
相关产品推荐

