首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sql select语句始终返回4条记录

Sql select语句始终返回4条记录
EN

Stack Overflow用户
提问于 2014-12-12 21:09:09
回答 3查看 66关注 0票数 0

我正在尝试解决一个SQL查询,其中我总是得到4条记录,如果其中一条记录不存在,它可以为空。

假设我有一个名为names的表

代码语言:javascript
复制
Name id:       Name:
1              John
2              Mike
3              Marcel

现在我将使用以下sql查询:

代码语言:javascript
复制
Select names.name from names

我将得到以下结果

代码语言:javascript
复制
John
Mike
Marcel

但我想要实现的是:

代码语言:javascript
复制
John
Mike
Marcel
NULL

所以我总是想要4个记录,即使只有3个。这不是一个增加第四个记录的选项。

有人知道怎么做到这一点吗?

EN

回答 3

Stack Overflow用户

发布于 2014-12-12 21:13:27

您可以使用union allorder by来实现这一点。您不需要指定数据库,但下面给出了一种方法:

代码语言:javascript
复制
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;

根据数据库的不同,语法的某些方面可能会有所不同,但其思想是相同的。

票数 2
EN

Stack Overflow用户

发布于 2014-12-12 21:22:12

您没有指定DBMS,因此这是ANSI SQL:

代码语言:javascript
复制
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,你可以这样做:

代码语言:javascript
复制
with numbers (nr) as (
  values (1),(2),(3),(4)
)
select names.name
from numbers  
  left join names on names.id = numbers.nr;

您可以将4替换为您的表中肯定不存在的任何值。

票数 0
EN

Stack Overflow用户

发布于 2014-12-12 21:30:38

您可以尝试使用简单的SQL查询。假设您使用的是SQL Server。

代码语言:javascript
复制
SELECT TOP 4
   id,name
FROM
  (SELECT id, name from t
  UNION ALL
    SELECT TOP 4
         NULL,null
     FROM sys.columns) T
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27444384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档