查询返回至少一个结果时添加虚拟行

时间:2014-11-11 22:55:04

标签: mysql sql

我已经看到了一些关于“如何在不存在时添加行”或“如果没有找到结果时如何返回虚拟行”的SQL问题,但我无法找到一种方法来获得相反的结果。我的目标是在找到至少一个结果时添加一行。但是,如果没有找到结果,则不应返回任何结果。

给出以下users表:

ID     USERNAME
------------------
1      bob
2      alice

虚拟行(未存储在数据库中):

ID     USERNAME
------------------
0      dummy

以下是我想要获得的结果:

# Query: find users with ID 1.

ID     USERNAME
------------------
1      bob
0      dummy

# Query: find users with ID 3.

(empty set)

# Query: find users with ID 0.

(empty set)

当然,虚拟行只能添加一次(而不是每个实际记录一次)。目前,我正在使用以下查询...

SELECT * FROM (
    SELECT * FROM users WHERE id = 1
    UNION SELECT 0, 'dummy'
)

然而,这在所有情况下都会添加虚拟行,即使第一个子SELECT返回空集也是如此。有什么办法可以在必要时添加我的行吗?

注意:这是一个MySQL数据库。

1 个答案:

答案 0 :(得分:2)

试试这个:

select id, username
from users
where id = 1
union all
select *
from (select 0 as id, 'dummy' as username) t
where exists (select 1 from users where id = 1);