Sql select语句总是返回4条记录

时间:2014-12-12 13:09:09

标签: sql

我正在尝试解决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条的选项。

有人知道如何实现这个目标吗?

3 个答案:

答案 0 :(得分:2)

您可以使用union allorder 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