Oracle如何查询无关联地址或无指定条件关联地址的用户
问题核心逻辑修正
你要实现的筛选规则本质可以简化为:匹配所有满足用户名含USR、且不存在任何CODE以'A'开头的关联地址的用户,这个规则天然覆盖你要的两类目标用户:
- 没有任何关联地址的用户
- 所有关联地址的CODE都不以'A'开头的用户
你原有语句的问题是:EXISTS判断仅能匹配「存在至少一个非A开头地址」的用户,直接把没有地址的用户排除在了结果外。
修正后SQL语句
SELECT USR.ID "ID", USR.NAME "NAME" FROM USERS USR WHERE -- 核心条件:不存在该用户的A开头CODE地址 NOT EXISTS ( SELECT * FROM ADDRESS ADDR WHERE ADDR.USERID = USR.ID AND ADDR.CODE LIKE 'A%' ) AND USR.NAME LIKE '%USR%'
注:顺带修复了你原有语句里的两个语法问题:SELECT字段末尾多余的逗号、表别名是
USR但字段前误用了USER前缀。
如果你想要显式拆分两类用户的判断逻辑,也可以写成如下形式,执行效果和上面的语句完全一致:
SELECT USR.ID "ID", USR.NAME "NAME" FROM USERS USR WHERE ( -- 存在非A开头的关联地址 EXISTS (SELECT * FROM ADDRESS ADDR WHERE ADDR.USERID = USR.ID AND ADDR.CODE NOT LIKE 'A%') -- 或者没有任何关联地址 OR NOT EXISTS (SELECT * FROM ADDRESS ADDR WHERE ADDR.USERID = USR.ID) ) AND USR.NAME LIKE '%USR%'
内容的提问来源于stack exchange,提问作者johnny-b-goode
相关产品推荐
相关产品推荐

