Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关键字'的任何替代品;或';在sql语句中?_Sql_Sql Server_Tsql - Fatal编程技术网

关键字'的任何替代品;或';在sql语句中?

关键字'的任何替代品;或';在sql语句中?,sql,sql-server,tsql,Sql,Sql Server,Tsql,我可能没有正确回答这个问题,因为我有一个问题因为“或”而花费了大量的时间 select stuff from table1 T1 left join table2 T2 on T2.field1 = T1.field or T2.field2 = T1.field where some condition 我必须检查两个字段才能加入。有更好的方法吗?根据所提供的内容,我可以想到两种选择: 改用 使用工会 请注意,我使用的是UNION ALL——它比UNION快,但是UNION会删除重复项,以

我可能没有正确回答这个问题,因为我有一个问题因为“或”而花费了大量的时间

select stuff 
from table1 T1
left join table2 T2 on T2.field1 = T1.field or T2.field2 = T1.field
where some condition

我必须检查两个字段才能加入。有更好的方法吗?

根据所提供的内容,我可以想到两种选择:

改用 使用工会 请注意,我使用的是
UNION ALL
——它比
UNION
快,但是
UNION
会删除重复项,以便根据您的需要进行更改:

   select stuff 
     from table1 T1
left join table2 T2 on T1.field = T2.field1
    where some condition
UNION ALL
   select stuff 
     from table1 T1
left join table2 T2 on T1.field = T2.field2
    where some condition

如果遵循该规则,则T2.field1=T1.field true或T2.field2=T1.field。 当输出取决于时,至少有一个为真

**select stuff 
from table1 T1, table2 T2 
where some condition AND (T2.field1 = T1.field or T2.field2 = T1.field)**

您可以在(T2.field1,T2.field2)中使用
T1.field
,但我怀疑它是否会提高查询性能

括号不能提高性能;它们只确保操作的顺序。@Eric:那么你必须提供实际的细节,以便我们诊断性能问题。我使用的是Union而不是Union all。似乎给出了我需要的结果。我假设T2.field1和T2.field2是字符串?也许有些指数是正确的?您是否已在sql server management studio中签出查询计划?
**select stuff 
from table1 T1, table2 T2 
where some condition AND (T2.field1 = T1.field or T2.field2 = T1.field)**