我需要一个处理“ default recordset
”概念的查询。
如果在运行查询时未找到请求的记录,则需要获取一组默认数据。
这里是一个例子:
Rec Category Location
-- -------- --------
1 Attendee 0
2 Distributor 0
3 Sponsor 0
4 Attendee 1
5 Distributor 1
6 Sponsor 1
7 Attendee 2
8 Distributor 2
9 Sponsor 2
在情况1中,请求的记录是匹配的(例如SELECT * FROM Category WHERE Location = 1
)。显然,这将返回记录4、5和6。
在情况2中,查询不匹配表中的记录,因此我需要默认记录;在这种情况下,我想将记录1、2和3作为默认记录。 SELECT * FROM Category WHERE Location = 5
将一无所获,因此应返回这些默认记录。
我将如何实现?
答案 0 :(得分:2)
由于Requested Records
不清楚。我最终得到了简单的方法。请检查下面的查询。
Select * from (
select * from Category Where Location = 1
) t Where <Expression> = <Something>
union
select * from (
select * from Category where Location = 5
) t2 Where <Expression> != <Something>
如果您要求的Records部分是另一个select语句,则可以使用
Select * from (
select * from Category Where Location = 1
) t Where Exists (Select 1 from tablex WHERE <Expression> = <Something> )
union
select * from (
select * from Category where Location = 5
) t2 Where NOT Exists (Select 1 from tablex WHERE <Expression> = <Something> )
答案 1 :(得分:0)
谢谢西蒙娜丽。 我想通过一个简单的选择来解决这个问题,而您的解决方案正是我所需要的。 (我正在发布新答案,因为我不知道如何在回复中设置代码格式。)
1)当存在位置= 1之类的位置的记录时,我想要这些记录。
2)当某个位置的记录不存在时,我想要“默认”记录,即位置= 0处的记录。
-- Records for the location exists, return them
select * from Category Where Location = 1
union
select * from Category Where Location = 0 and not exists
(select * from Category Where Location = 1)
-- Records for the location do not exists, return the default records (location=0)
select * from Category Where Location = 7
union
select * from Category Where Location = 0 and not exists
(select * from Category Where Location = 7)