写一个where子句比较两列到同一子查询?



我想知道是否有可能使where子句将2列与同一子查询进行比较。我知道我可以做一个临时表/变量表或写相同的子查询两次。但如果可能的话,我想避免所有这些。Subquery很长很复杂,如果我必须写两次,将会造成很大的开销。

这是我正在尝试做的一个例子。

SELECT * FROM Table WHERE (Column1 OR Column2) IN (Select column from TABLE) 

我正在寻找一个简单的答案,可能只是NO,但如果可能的话,没有太复杂的东西,请给我提示。

我更新了选择使用OR而不是AND,因为这更好地澄清了我的问题。

您给出的示例可能使用存在效果最好,例如:

select *
from t1
where exists (
select 1 from t2 
where t2.col = t1.col1 and t2.col = t1.col2
);

为了避免将复杂的子查询写入两次,您可以使用CTE(公共表表达式):

;WITH MyFirstCTE (x) AS
(
SELECT [column] FROM [TABLE1]
-- add all the very complicated stuff here
)
SELECT *
FROM   Table2
WHERE  Column1 IN (SELECT x FROM MyFirstCTE)
AND    Column2 IN (SELECT x FROM MyFirstCTE)

或使用EXISTS:

;WITH MyFirstCTE (x) AS
(
SELECT [column] FROM [TABLE1]
-- add all the very complicated stuff here
)
SELECT *
FROM   Table2
WHERE  EXISTS (SELECT 1 FROM MyFirstCTE WHERE x = Column1)
AND    EXISTS (SELECT 1 FROM MyFirstCTE WHERE x = Column2)
  • 我故意用了笨拙的名字,最好选个更好的。
  • 我从;开始,因为如果它不是大脚本中的第一个命令,那么需要;将CTE与之前的命令分开。

最新更新