Sql 我怎样才能使这段代码正常工作,怎样才能使这段代码更加优化?

Sql 我怎样才能使这段代码正常工作,怎样才能使这段代码更加优化?,sql,oracle-sqldeveloper,Sql,Oracle Sqldeveloper,我有两张桌子:gal和TCPD。我想在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 li

我有两张桌子:gal和TCPD。我想在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) 
对于这种情况,我没有指定国家/地区

我尝试使用下一个代码,但无法正常工作:


我怎样才能使这个代码正常工作

您需要使用
,而不是

您正在查找所有数据,但不以给定短语开头的项目除外。因此,您需要的名称不是以
07\uu
开头的,也不是以
TR\u
开头的,也不是以
ST\u
开头的。。。但是您使用的是
而不是
,所以您需要问的是“Name不以07开头,也不以TR开头,也不以ST开头,…”

使用
而不是
意味着你总是能得到一切,因为如果某个东西以
07开头,那么它也不能以
TR开头,这根本是不可能的——你选择了所有这些条件中至少有一个适合的条件——因为这些条件是“相互包容的”,
true
是唯一可能的结果。

更改此部分:

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)
这些都不应该是一个或多个


如果名称不为null,则无论值是什么,都将选择它,因为ORs意味着必须满足这些条件中的任何一个才能使其为真。

您能否更精确地说明代码在做什么不应该做,以及应该做什么不喜欢做?您是否收到错误消息?它是在做一些意想不到的事情吗?如果您使用的是Oracle DB,您可以使用
MERGE
来实现这一点:如果您没有做我所期望的所有事情,请插入更多我所期望的行。如果gal中不存在名称或存在名称,如“07%”,请不要在TCPD中插入个人副本。。。。我希望去比较符合条件的用户的电子邮件gal.country='Germany'谢谢!我还有一个问题:我能把这段代码做得更好吗?谢谢!我还有一个问题:我能把这段代码做得更优化吗?