在今天的查询中,我想在两个不同的表中的两列中选择具有特定公司名称的行。我这样做了
WHERE (N.COMPANY LIKE '%ACME%' OR C.COMPANY LIKE '%ACME%')
首先,它需要20分钟才能运行,这很奇怪,因为如果我只过滤其中一个列,则需要大约10秒钟。其次,当它完成时,某些行中某些列的值为NULL,因为我知道数据库中存在这些记录中的那些列的值。那么这里发生了什么?为什么SQL不能在两个表的两列上执行OR?
(我使用UNION解决了这个问题 - 我为C.COMPANY LIKE '%ACME%'
运行了它并使用SELECT... WHERE N.COMPANY LIKE '%ACME%'
对其进行了UNIONED)
答案 0 :(得分:0)
在一个查询中混合使用JOIN
和WHERE
关键字是不好的做法,因为WHERE
在幕后是INNER JOIN
。根据我的经验,这通常会导致人们不想要的不受控制的连接。
尝试在相应表格的连接后直接放置LIKE
,如下所示:
...
JOIN N ON <Your existing relationship> AND N.COMPANY LIKE '%ACME%'
...
JOIN C ON <Your existing relationship> AND C.COMPANY LIKE '%ACME%'
...