是否可以在不将第一个结果集插入临时表或重复选择语句的情况下执行以下操作?:
SELECT ID, ForeignKeyID, SomeValue
FROM MyTable
WHERE (SomeValue > @SomeValueFilter)
SELECT ID, IntegerValue
FROM MyOtherTable
WHERE {ID is in the ForeignKeyID set from the previous SELECT}
SELECT ID, SomeDateTime
FROM MyYetAnotherTable
WHERE {ID is in the IntegerValue set from the previous SELECT}
预期产出:
Table 1: ID, ForeignKeyID, SomeValue
Table 2: ID, IntegerValue
Table 3: ID, SomeDateTime
编辑:添加了第三个选择,这意味着我无法使用CTE。 EDIT2:不同的数据类型和预期的输出。
答案 0 :(得分:0)
CTE?但也许这并不能满足"而不重复选择"?不太清楚这意味着什么...
;WITH t1 as (
SELECT ID, ForeignKeyID, SomeValue
FROM MyTable
WHERE (SomeValue > @SomeValueFilter)
)
SELECT ID, Value
FROM MyOtherTable
WHERE ID IN (SELECT ForeignKeyID FROM t1)
UNION
SELECT ID, Value
FROM MyYetAnotherTable
WHERE ID IN (SELECT ForeignKeyID FROM t1)
修改强>
如果你不需要维护数据类型,你可以使用CAST或CONVERT以及UNION,但这显然只会给你一个结果集。
如果您需要维护数据类型,那么如果您不能使用临时表,我就无法重复第一个查询。
如果您需要三个单独的结果集,那么我认为您肯定会重复查询。