从数据子集中选择

时间:2015-04-30 14:03:00

标签: sql sql-server union

我正在研究MS SQL Server 2014中的查询

那基本上是很多工会

select x, y
where a = b
union
select x, y
where a = b
union
select x, y
where a = b

它工作正常,但where子句在每个选择上都是相同的。为了便于维护,我想知道是否有更好,更清洁的方法来做到这一点。

我在考虑先用where子句选择数据,然后只对这些数据进行所有其他查询。

但我对如何改进此查询的任何想法持开放态度。

3 个答案:

答案 0 :(得分:4)

;WITH Test AS
(
    SELECT x, y
    UNION
    SELECT x, y
    UNION  
    SELECT x, y
)
SELECT * FROM Test
WHERE a = b

答案 1 :(得分:1)

您可以使用子查询并在其外部使用where子句以便于维护。 只需确保将所有列都放在where子句中需要的子查询中。例如

SELECT * FROM 
    (
        SELECT x,y,a,b FROM table1
        union
        SELECT x,y,a,b FROM table2
        UNION
        SELECT x,y,a,b FROM table3
    )subquery
    WHERE a=b

答案 2 :(得分:0)

Select * 
From
(
   select x, y

   union
   select x, y

   union
   select x, y
) MyDerivedTable
Where ...

确保在派生表内的表的select语句中包含需要过滤的列。