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

时间:2011-11-29 12:33:23

标签: 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提供的东西来获取预定义的系统帐户?

4 个答案:

答案 0 :(得分:5)

其他答案略有不同:不是(A或B或C)=不是A而不是B而不是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')
           ); 

答案 1 :(得分:4)

而不是OR,您需要使用AND

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

但是,这也会过滤名称中包含SYS或以SH结尾的合法非系统用户。用户JOSH将会丢失。

答案 2 :(得分:2)

or替换为AND,我认为它将开始运作。

然而,更好的方法可能是有一个标志,指示它是否是系统用户。一种更具有sophosticated的方法可能是拥有与User表有多对多关系的权限的单独表。

答案 3 :(得分:0)

你可以试试这个:

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