在WHERE中使用OR会产生意外结果

时间:2013-08-05 22:20:25

标签: sql-server-2008-r2

在今天的查询中,我想在两个不同的表中的两列中选择具有特定公司名称的行。我这样做了

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)

1 个答案:

答案 0 :(得分:0)

在一个查询中混合使用JOINWHERE关键字是不好的做法,因为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%'
...