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

时间:2015-01-28 20:16:36

标签: sqlite null max

我有这张表equip_info

   equip_id | fam_id | asset_no
  ----------|--------|-----------
    1       | 1      |  1
    2       | 1      |  2

我想从其他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))

我得到了以下结果:

   equip_id | fam_id | asset_no
  ----------|--------|-----------
    1       | 1      |  1
    2       | 1      |  2
    3       | 1      |  3

但是,如果我这样做:

INSERT INTO equip_info (fam_id, asset_no)
VALUES (2, (SELECT MAX(asset_no) + 1 FROM equip_info WHERE fam_id = 2))

它说: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

备注:equip_id是主键,自动增量

1 个答案:

答案 0 :(得分:3)

当没有匹配的行时,

MAX(asset_no)为NULL。

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