Sqlite:当行不存在或为空时将最大值设置为零
Sqlite: get max value set to zero when row doesn't exist or is null
我有这个 table equip_info
:
equip_id | fam_id | asset_no
----------|--------|-----------
1 | 1 | 1
2 | 1 | 2
我想从另一个 fam_id
插入一个新的 equip_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
为主键,自增
MAX(asset_no)
当没有匹配行时为 NULL。
要用其他值替换 NULL,请使用 IFNULL,即将 MAX(asset_no)
替换为 IFNULL(MAX(asset_no), 0)
。
我有这个 table equip_info
:
equip_id | fam_id | asset_no
----------|--------|-----------
1 | 1 | 1
2 | 1 | 2
我想从另一个 fam_id
插入一个新的 equip_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
为主键,自增
MAX(asset_no)
当没有匹配行时为 NULL。
要用其他值替换 NULL,请使用 IFNULL,即将 MAX(asset_no)
替换为 IFNULL(MAX(asset_no), 0)
。