我有一个查询,它使用UNION ALL从两个不同的select语句返回结果。
我想将其设置为仅返回第一个选择结果,如果第一个选择为空,则返回第二个选择语句的结果。
有人可以给我一个简单的例子,告诉我如何做到这一点。
提前致谢 布赖恩
答案 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子句更有效的方法。