我正在尝试解决一个SQL查询,其中我总是得到4条记录,如果其中一条记录不存在,它可以为空。
假设我有一个名为names的表
Name id: Name:
1 John
2 Mike
3 Marcel现在我将使用以下sql查询:
Select names.name from names我将得到以下结果
John
Mike
Marcel但我想要实现的是:
John
Mike
Marcel
NULL所以我总是想要4个记录,即使只有3个。这不是一个增加第四个记录的选项。
有人知道怎么做到这一点吗?
发布于 2014-12-12 21:13:27
您可以使用union all和order by来实现这一点。您不需要指定数据库,但下面给出了一种方法:
select name
from (select name
from table t
limit 4
) union all
(select null union all
select null union all
select null union all
select null
)
order by (case when name is not null then 1 else 0 end) desc
limit 4;根据数据库的不同,语法的某些方面可能会有所不同,但其思想是相同的。
发布于 2014-12-12 21:22:12
您没有指定DBMS,因此这是ANSI SQL:
with numbers (nr) as (
values (1),(2),(3),(4)
)
select names.name
from numbers
left join (
select id,
name,
row_number() over (order by id) as rn
from names)
) names on names.rn = numbers.nr;如果不知道表中有3行还是4行,可以对连接条件应用一个限制:on names.rn = numbers.nr and names.nr <= 3。这将确保您从names表中检索的行永远不会超过三行。
如果你只关心If 1,2,3,而不会有其他的If,你可以这样做:
with numbers (nr) as (
values (1),(2),(3),(4)
)
select names.name
from numbers
left join names on names.id = numbers.nr;您可以将4替换为您的表中肯定不存在的任何值。
发布于 2014-12-12 21:30:38
您可以尝试使用简单的SQL查询。假设您使用的是SQL Server。
SELECT TOP 4
id,name
FROM
(SELECT id, name from t
UNION ALL
SELECT TOP 4
NULL,null
FROM sys.columns) Thttps://stackoverflow.com/questions/27444384
复制相似问题