Sql 我怎样才能使这段代码正常工作,怎样才能使这段代码更加优化?
我有两张桌子:gal和TCPD。我想在TCPD_PERSONEL_COPY中插入gal中但TCPD_PERSONEL_COPY中不存在的用户,条件是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.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'谢谢!我还有一个问题:我能把这段代码做得更好吗?谢谢!我还有一个问题:我能把这段代码做得更优化吗?