【发布时间】:2022-12-10 05:33:31
【问题描述】:
我想知道是否有可能使 where 子句将 2 列与同一子查询进行比较。我知道我可以制作一个临时表/变量表或将相同的子查询写两次。但我想尽可能避免所有这些。 Subquery 又长又复杂,如果我必须写两次,会造成很大的开销。
这是我正在尝试做的一个例子。
SELECT * FROM Table WHERE (Column1 OR Column2) IN (Select column from TABLE)
我正在寻找一个简单的答案,这可能只是否,但如果没有任何太详细的内容可能的话,请告诉我。
我更新了选择以使用 OR 而不是 AND 因为这更好地澄清了我的问题。
【问题讨论】:
-
为什么是子查询?为什么不是正确的
join on othertable.col in (this table.col1, this table.col2)?哪怕你只写子查询一次,它仍然可能被评估两次。那么,您的目标是对性能最不意外,还是最容易让人眼前一亮? -
也许您过于简单化了,但是仅从 Table1 中选择您只需要一个半连接,所以我建议存在在这里效果最好。
-
@AaronBertrand 现在我想到它可能真的有用。这给了我一些工作的想法。将子查询转换为表连接并比较两列。我认为根据社区的回答,我有多种选择可供选择。感谢您的帮助。我最初的问题被否决了,这让我很难过。不太确定为什么我猜没有人喜欢我的问题。
标签: sql sql-server