sql - 如何在一个查询中使用 LIKE 和 IN 运算符?

标签 sql oracle oracle11g sql-like

我的简单sql语句是这样的:

SELECT USERNAME FROM ALL_USERS;

但我想从结果中过滤系统用户。我搜索但找不到 Oracle 提供的任何内容;所以我尝试了这样的声明,但它不起作用:
select username from all_users where username not like '%SH%' 
    or username not like '%SYS%' 
    or username not in ('ANONYMOUS',            
                        'DBSNMP',
                        'MGMT_VIEW',
                        'ORDPLUGINS',
                        'OUTLN',
                        'SI_INFORMATION_SCHEMA',
                        'WK_TEST',
                        'WKPROXY',
                        'XDB'); 

这不起作用。我应该如何修改我对所需输出的查询,或者 oracle 提供了一些东西来获取预定义的系统帐户?

最佳答案

其他答案略有不同:not (A or B or C) = not A and not B and not C,所以你可能最初想要的是:

select username from all_users 
where not (username like '%SH%' 
           or username like '%SYS%' 
           or username in ('ANONYMOUS',            
                        'DBSNMP',
                        'MGMT_VIEW',
                        'ORDPLUGINS',
                        'OUTLN',
                        'SI_INFORMATION_SCHEMA',
                        'WK_TEST',
                        'WKPROXY',
                        'XDB')
           ); 

关于sql - 如何在一个查询中使用 LIKE 和 IN 运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8310747/

相关文章:

sql - 甲骨文漏洞? SELECT 不返回重复项,SELECT 中的 INSERT 有重复的行

mysql - 从带有外键的表中删除

sql - 在 Oracle 中按组旋转没有聚合函数或行到列

sql - 根据计算值选择,优化

oracle - 不使用触发器在 Oracle 中自动递增

html - Oracle Apex 5 - 类似于 App Builder 中的页脚栏

java - 在调用 PreparedStatement 时以毫秒为单位设置查询超时,而不是秒?

oracle - 如何找到导致 ORA-00054 的原因?

mysql - 使用 IN OUT 参数调用 mysql 中的存储过程,返回插入结果

mysql - 在mysql时间戳上选择日期范围