Sql server 2008 r2 使用或在何处产生意外结果

Sql server 2008 r2 使用或在何处产生意外结果,sql-server-2008-r2,Sql Server 2008 R2,在今天的查询中,我想从两个不同的表中的两列中选择具有特定公司名称的行。我喜欢这样做 WHERE (N.COMPANY LIKE '%ACME%' OR C.COMPANY LIKE '%ACME%') 首先,运行需要20分钟,这很奇怪,因为如果我只对其中一列进行过滤,大约需要10秒。第二,当它完成时,当我知道数据库中存在这些记录中这些列的值时,某些行中某些列的值为NULL。这是怎么回事?为什么SQL不能对两个表中的两列执行OR操作 (我用一个联合体解决了这个问题——我为C.COMPANY(如“

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

WHERE (N.COMPANY LIKE '%ACME%' OR C.COMPANY LIKE '%ACME%')
首先,运行需要20分钟,这很奇怪,因为如果我只对其中一列进行过滤,大约需要10秒。第二,当它完成时,当我知道数据库中存在这些记录中这些列的值时,某些行中某些列的值为NULL。这是怎么回事?为什么SQL不能对两个表中的两列执行OR操作


(我用一个联合体解决了这个问题——我为
C.COMPANY(如“%ACME%”)运行它,并用
SELECT(如
N.COMPANY(如“%ACME%”)建立了联合体)

在一个查询中混淆
JOIN
WHERE
关键字是一种不好的做法,因为
其中
是幕后的
内部连接
。根据我的经验,这通常会导致不受控制的连接,这是人们不希望的

尝试将您的
LIKE
直接放在相应表的联接之后,如下所示:

...
JOIN N ON <Your existing relationship> AND N.COMPANY LIKE '%ACME%'
...
JOIN C ON <Your existing relationship> AND C.COMPANY LIKE '%ACME%'
...
。。。
加入N和N公司,如“%ACME%”
...
加入C和C公司,如“%ACME%”
...

您所说的“某些行的值为空”是什么意思?很明显,你在做一个你没有展示给我们的加入,而且你做错了!我们需要完整的查询(或者可能是缩小的版本,再现您的问题)、一些示例输入和输出以及实际输出。我整理了文本以澄清我的意思。整个查询很大,大约有5个连接。它在没有化合物或在何处工作良好。