我如何才能使这段代码正常工作以及如何使代码更加优化呢?

时间:2015-08-07 07:23:32

标签: sql oracle-sqldeveloper

我有两个表:gal和TCPD_personel_COPY。我想在TCPD_PERSONEL_COPY中插入那些在gal中但尚未存在于TCPD_PERSONEL_COPY白色条件gal.country='Germany'中的用户。但我也有条件:

(gal.name not like '07_%' 
                 gal.name not like 'TR_%' 
                 gal.name not like 'ST_%' 
                  gal.name not like 'KB_%'  
                   gal.name not like 'HS_%'  
                    gal.name is not null) 

在这种情况下,我没有指定国家。

我尝试使用下一个代码,但它不能正常工作:

如何才能使此代码正常工作?

2 个答案:

答案 0 :(得分:1)

您需要使用and,而不是or

您正在查找所有数据,但不包含不以给定词组开头的项目除外。所以你想要的名字不是以07_开头,也不是TR_,也不是ST_ ......但是你正在使用not like,所以您需要问的是"名称不以07_开头,并且它不以TR_开头,并且它不以ST_,...开始#"。

使用or代替and意味着您始终可以获得所有内容,因为如果某些内容以07_开头,则它也不能以TR_开头,这根本不可能 - 你选择了至少有一个条件适合的所有 - 因为条件是"相互包容",true是唯一可能的结果。

答案 1 :(得分:1)

更改此部分:

where (gal.name not like '07_%' or 
       gal.name not like 'TR_%' or
       gal.name not like 'ST_%' or
       gal.name not like 'KB_%'  or
       gal.name not like 'HS_%'  or
       gal.name is not null)

这些应该是AND而不是OR。

如果名称不为空,那么它的价值是什么才能被选中,因为OR意味着任何一个条件都会被满足,因为它是真实的。