在sql查询中实现Bitwise OR而不是多个In子句

时间:2017-11-10 09:49:03

标签: sql-server tsql

我有一个查询,它使用IN子句(也可以使用EXISTS)用于多个列,这些列使用OR Clause中的WHERE子句进行过滤。是否有更好的方法来编写此查询。

SELECT columndata FROM TABLE1
WHERE column1key in (select columnkey from #temptable1)
OR column2key in (select columnkey from #temptable2)
OR column3key IN (SELECT columnkey FROM #temptable3)

2 个答案:

答案 0 :(得分:0)

你可以选择“LEFT JOIN'如下图所示

    SELECT columndata 
    FROM TABLE1 tab1
    LEFT JOIN #temptable1  t1 on tab1.column1key =  t1.columnkey
    LEFT JOIN #temptable2  t2 on tab1.column2key =  t2.columnkey
    LEFT JOIN #temptable3  t3 on tab1.column3key =  t3.columnkey  

答案 1 :(得分:0)

通过这种方式,您可以获得更好的性能,这会将SELECT分解为单独的查询,以后再进行重复数据删除。

SELECT columndata FROM TABLE1
WHERE column1key in (select columnkey from #temptable1)
UNION
SELECT columndata FROM TABLE1
WHERE column2key in (select columnkey from #temptable2)
UNION
SELECT columndata FROM TABLE1
WHERE column3key IN (SELECT columnkey FROM #temptable3)

但你真的要尝试它

如果没有索引或索引不好,您仍然需要扫描然后相同数量的数据。有了好的索引,这可能会更好......

作为附注,EXISTS和IN将在此处提供相同的计划