我已经看到了一些关于“如何在不存在时添加行”或“如果没有找到结果时如何返回虚拟行”的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数据库。
答案 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);