SQL Query返回两个select语句之一

时间:2010-12-17 17:13:59

标签: sql select union

我有一个查询,它使用UNION ALL从两个不同的select语句返回结果。

我想将其设置为仅返回第一个选择结果,如果第一个选择为空,则返回第二个选择语句的结果。

有人可以给我一个简单的例子,告诉我如何做到这一点。

提前致谢 布赖恩

2 个答案:

答案 0 :(得分:1)

这将检查您的第一个查询是否返回了记录,然后执行它。否则它会执行第二个查询。

DECLARE @FirstCount int

SET @FirstCount = (SELECT COUNT (*) FROM <First query>)

IF @FirstCount > 0
    BEGIN
        <first query here>
    END
ELSE
    BEGIN
        <Second query here>
    END

你也可以像这样使用表变量:

DECLARE @FirstQuery TABLE
(
    <fields>
)

SET @FirstQuery = <First Query>

IF EXISTS (SELECT * FROM @FirstQuery)
    BEGIN
        SELECT * FROM @FirstQuery
    END
ELSE
    BEGIN
        <Second query here>
    END

答案 1 :(得分:1)

假设您需要查询而不是批处理,则可以在第二个查询中复制Union的第一个查询以确定它是否产生结果,并使第二个查询以此为条件。 例如。如果没有订单,则仅显示货件,否则显示两者(没有任何商业意义,但显示要点):

select id from tb_shipment
union all 
select id from tb_order where 0 = (select COUNT(*) from tb_shipment)

在不知道你的数据的情况下,我不能说你是否有比WHERE子句更有效的方法。