Sqlite:当行不存在或为空时将最大值设置为零

REA*_*OFO 5 sqlite null max

我有这张桌子equip_info

   equip_id | fam_id | asset_no
  ----------|--------|-----------
    1       | 1      |  1
    2       | 1      |  2
Run Code Online (Sandbox Code Playgroud)

我想equip_id从不同的地方插入一个新的fam_id并获得asset_no增量。

如果我这样做:

INSERT INTO equip_info (fam_id, asset_no)
VALUES (1, (SELECT MAX(asset_no) + 1 FROM equip_info WHERE fam_id = 1))
Run Code Online (Sandbox Code Playgroud)

我得到以下结果:

   equip_id | fam_id | asset_no
  ----------|--------|-----------
    1       | 1      |  1
    2       | 1      |  2
    3       | 1      |  3
Run Code Online (Sandbox Code Playgroud)

但是,如果我这样做:

INSERT INTO equip_info (fam_id, asset_no)
VALUES (2, (SELECT MAX(asset_no) + 1 FROM equip_info WHERE fam_id = 2))
Run Code Online (Sandbox Code Playgroud)

它说: NOT NULL constraint failed: equip_info.asset_no

如果 fam_id = 2 不存在,我如何才能将增量改为 1?

我想得到这个结果:

   equip_id | fam_id | asset_no
  ----------|--------|-----------
    1       | 1      |  1
    2       | 1      |  2
    3       | 1      |  3
    4       | 2      |  1
Run Code Online (Sandbox Code Playgroud)

备注:equip_id是主键,自增

CL.*_*CL. 7

MAX(asset_no) 当没有匹配的行时为 NULL。

要将 NULL 替换为其他值,请使用IFNULL,即替换MAX(asset_no)IFNULL(MAX(asset_no), 0)