我有一个具有以下算法的SP。
IF <SomeCondition>
BEGIN
SELECT * FROM TABLE1
END
ELSE
BEGIN
SELECT * FROM TABLE2
END
--Union the above with the query below
UNION
SELECT * FROM TABLE3
返回的记录集完全相同。我需要做一个结果集的UNION和另一个查询。
有没有办法在不使用临时表的情况下执行此操作?
答案 0 :(得分:8)
怎么样:
SELECT * FROM TABLE1 WHERE <SomeCondition>
UNION
SELECT * FROM TABLE2 WHERE NOT <SomeCondition>
UNION
SELECT * FROM TABLE3
如果您担心两次评估:
DECLARE @condition bit
SET @condition = CASE WHEN <SomeCondition> THEN 1 ELSE 0 END
SELECT * FROM TABLE1 WHERE @condition = 1
UNION
SELECT * FROM TABLE2 WHERE @condition = 0
UNION
SELECT * FROM TABLE3
答案 1 :(得分:3)
如果您不介意它未编译,您也可以使用动态SQL。例如:
DECLARE @sql VARCHAR(100)
DECLARE @table VARCHAR(10)
IF <SomeCondition>
BEGIN
SET @table = 'Table1'
END
ELSE
BEGIN
SET @table = 'Table2'
END
SET @sql = 'SELECT * FROM ' + @table + ' UNION SELECT * FROM TABLE3'
EXEC(@sql)
答案 2 :(得分:0)
此外,如果您可以使用UNION ALL代替UNION,那么这样做 - 可能会更便宜,不能消除重复