2017-02-10 14 views
1

我有以下联合查询:如果查询返回没有行,如何保证行?

select dataItem,1 as sortOrder from table1 
union 
select dataItem,2 from table2 
order by sortOrder 

如果第一select查询返回一个排和第二select查询返回任何行,然后我得到以下结果:

dataItem | sortOrder 
---------+---------- 
12345 | 1 

我想以确保总是至少有一行,以便如果第二次查询不返回任何行,我们将有:

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

我该如何做到这一点?

+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 
0

您可以添加一个更unionquery检查if there is any row in table2,如果no rows然后return row with default values

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 
+0

虽然这个代码片段是受欢迎的,并且可以提供一些帮助,如果它包含一个解释,它会[大大改进](// meta.stackexchange.com/q/114762)*如何*和*为什么*这解决了这个问题。请记住,你正在为将来的读者回答这个问题,而不仅仅是现在问的人!请编辑您的答案以添加解释,并指出适用的限制和假设。 –