我有一个简单的查询:
Select qty from X where id=....;
此查询始终返回0或1行。
当它返回1行时一切正常。
但如果它返回0行,我的查询将失败,因为qty
用于计算。 (这实际上是Select statment中的Sub查询。)
我需要以某种方式确保查询始终返回1行。
我试过了:
Select coalesce(qty,0) from X where id=....;
但它没有帮助,好像没有行,合并是没用的。
如果没有找到行,则应该提供0
我该如何解决?
答案 0 :(得分:10)
你可以这样做:
SELECT COALESCE( (SELECT qty from X where id=....), 0)
如果内部SELECT
语句未返回任何内容,则COALESCE
会在外部0
语句中为您提供SELECT
。
答案 1 :(得分:1)
Select *.a from (
Select qty, 0 as priority from X where id=....
Union
Select 0, 1 as priority
) a
Order By a.priority Asc
Limit 1
这个选择基本上确保通过在末尾添加一个额外的行来返回至少一行,并通过添加limit语句我们只返回第一行。
所以现在有一种情况,即至少找到一行,并在末尾添加额外的行。在这种情况下,由于按优先级递增的顺序,将返回找到的第一行(请参阅->
):
qty priority
-> 1 0
3 0
4 0
. .
0 1
然后会出现没有找到行但返回附加行的情况:
qty priority
-> 0 1
答案 2 :(得分:0)
试试这个。
SELECT COALESCE((SELECT qty
FROM x
WHERE id = @MyIdVar), 1)
答案 3 :(得分:0)
答案 4 :(得分:0)
如果未找到任何记录,则返回'未找到任何行'
if not exists(Select * from table where condition=...)
Begin
Select * from table where condition=...
End
Else
Begin
Select 'No rows found'
End
每当你使用它时,你将获得记录,否则没有找到记录消息。