【问题标题】:SQL - select an increment value or return a constantSQL - 选择一个增量值或返回一个常量
【发布时间】:2015-06-20 05:28:57
【问题描述】:

所以我需要做的是选择列的最大值(每次增加 1),如果这个值为空(第一次出现的情况)我必须返回常量 0(它将是下一次出现的最大值)。

我的目标是做这样的事情:

SELECT (Max(id) + 1) FROM my_table WHERE id IS NOT NULL
UNION
SELECT 0 FROM my_table WHERE id IS NULL

但是这不起作用。我能做什么?

【问题讨论】:

    标签: mysql sql select null union


    【解决方案1】:

    查询的编写方式将返回两行。一个用于第一个查询,一个用于联合之后。

    如果你只想要一行,你可以使用 MAX() 函数。如果表为空,则 MAX() 函数返回 null。然后您可以选择在您的 select 语句中使用 COALESCE() ,该语句返回第一个非空值。换句话说,这个查询:

    SELECT COALESCE(MAX(id) + 1, 0) AS maxID
    FROM myTable;
    

    可以解释为:给我表中的最大 ID。如果表为空,则返回 0。

    这是一个fiddle 示例,其中包含一个空表和一个非空表。

    【讨论】:

    • 很好的解释,成功了!并感谢小提琴链接(毫无疑问,这将有助于未来的使用)
    • @maher.belkh 没问题。是的,SQL Fiddle 非常有助于共享数据库帮助,尤其是在这个站点上。
    【解决方案2】:

    试试这个

    SELECT COALESCE(Max(id + 1), 0) FROM my_table WHERE id IS NOT NULL
    

    【讨论】:

    • 这是一个很好的解决方案。但是可以通过删除 WHERE id IS NOT NULL 来改进它,因为您的合并函数可以处理它,因此它变得多余。
    • 是的,我已经像作者的商业规则一样盲目复制\粘贴了
    【解决方案3】:
    SELECT (MAX(CASE WHEN id IS NULL THEN 0 ELSE id END) + 1) FROM my_table
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多