我正在尝试解决SQL查询,其中我总是获得4条记录,如果其中一条记录不存在,则可以为空。
假设我有下表名为
的表Name id: Name:
1 John
2 Mike
3 Marcel
现在我将使用以下sql查询:
Select names.name from names
我会得到以下结果
John
Mike
Marcel
但我想要实现的是:
John
Mike
Marcel
NULL
所以我总是想要4条记录,即使只有3条记录。它不是添加第4条的选项。
有人知道如何实现这个目标吗?
答案 0 :(得分:2)
您可以使用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;
语法的某些方面可能会有所不同,具体取决于数据库,但想法是一样的。
答案 1 :(得分:0)
您没有指定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
表中检索三行以上。
如果您只关心ID 1,2,3并且永远不会有其他ID,您可以这样做:
with numbers (nr) as (
values (1),(2),(3),(4)
)
select names.name
from numbers
left join names on names.id = numbers.nr;
您可以将4
替换为表中肯定不存在的任何值。
答案 2 :(得分:0)
您可以尝试使用简单的SQL查询。假设您使用的是SQL Server。
SELECT TOP 4
id,name
FROM
(SELECT id, name from t
UNION ALL
SELECT TOP 4
NULL,null
FROM sys.columns) T
<强> SQLFIDDLE 强>