SELECT然后根据之前的SELECT过滤

时间:2017-02-08 20:52:29

标签: sql-server

是否可以在不将第一个结果集插入临时表或重复选择语句的情况下执行以下操作?:

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:不同的数据类型和预期的输出。

1 个答案:

答案 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,但这显然只会给你一个结果集。

如果您需要维护数据类型,那么如果您不能使用临时表,我就无法重复第一个查询。

如果您需要三个单独的结果集,那么我认为您肯定会重复查询。