Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
返回两个select语句之一的SQL查询_Sql_Select_Union - Fatal编程技术网

返回两个select语句之一的SQL查询

返回两个select语句之一的SQL查询,sql,select,union,Sql,Select,Union,我有一个查询,它使用UNION ALL从两个不同的select语句返回结果 我想将其设置为仅返回第一个select结果,如果第一个select为空,则返回第二个select语句的结果 有人能给我一个简单的例子,我可以如何做到这一点 提前谢谢 Brian这将检查第一次查询返回的记录,然后执行它。否则将执行第二个查询。 DECLARE @FirstCount int SET @FirstCount = (SELECT COUNT (*) FROM <First query>) IF

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

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

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

提前谢谢
Brian

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

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@FirstCount int
设置@FirstCount=(从中选择计数(*)
如果@FirstCount>0
开始
结束
其他的
开始
结束
您也可以使用如下表变量:

DECLARE @FirstQuery TABLE
(
    <fields>
)

SET @FirstQuery = <First Query>

IF EXISTS (SELECT * FROM @FirstQuery)
    BEGIN
        SELECT * FROM @FirstQuery
    END
ELSE
    BEGIN
        <Second query here>
    END
DECLARE@FirstQuery表
(
)
SET@FirstQuery=
如果存在(从@FirstQuery中选择*
开始
从@FirstQuery中选择*
结束
其他的
开始
结束

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


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

您是说SELECT是空的,因为它返回空字符串还是根本不返回任何记录?
select id from tb_shipment
union all 
select id from tb_order where 0 = (select COUNT(*) from tb_shipment)