Sql 如果查询没有返回行,如何保证有行?

Sql 如果查询没有返回行,如何保证有行?,sql,ms-access,ms-access-2010,Sql,Ms Access,Ms Access 2010,我有以下联合查询: select dataItem,1 as sortOrder from table1 union select dataItem,2 from table2 order by sortOrder 如果第一个select查询返回一行,第二个select查询不返回任何行,那么我得到以下结果: dataItem | sortOrder ---------+---------- 12345 | 1 我希望确保始终至少有一行,这样,如果seconde查询不返回任何行,我们将有

我有以下联合查询:

select dataItem,1 as sortOrder from table1
union
select dataItem,2 from table2
order by sortOrder
如果第一个
select
查询返回一行,第二个
select
查询不返回任何行,那么我得到以下结果:

dataItem | sortOrder
---------+----------
12345    | 1
我希望确保始终至少有一行,这样,如果seconde查询不返回任何行,我们将有:

dataItem | sortOrder
---------+----------
12345    | 1
0        | 2

如何实现这一点?

我们的想法是添加max(dataItem)或0的并集。不确定访问语法

select dataItem,1 as sortOrder from table1
union
select dataItem, 2 from table2
union 
select iif(max(dataItem) is null, 0, max(dataItem)), 2 from table2
order by sortOrder

您可以再添加一个
联合
,此
查询
检查
表2中是否有行
,如果
没有行
,则
返回带有默认值的行

select dataItem,1 as sortOrder from table1
union
select dataItem,2 from table2    
union
select 0,2
where not exists (select 1 from table2)
order by sortOrder

创建一个将返回rowtype的函数,并在此函数内检查是否没有行,创建一个新的并返回它。欢迎使用此代码段,并可能提供一些帮助,这将是如何以及为什么解决问题的方法。记住,你是在将来回答读者的问题,而不仅仅是现在提问的人!请在回答中添加解释,并说明适用的限制和假设。