MySQL根据条件插入不同的值
我在MySQL中有以下查询。这将向列表中插入一个新项目,其中新项目的位置设置为比当前最大位置大1MySQL根据条件插入不同的值,mysql,Mysql,我在MySQL中有以下查询。这将向列表中插入一个新项目,其中新项目的位置设置为比当前最大位置大1 INSERT INTO items SET item_name="apple", position=(SELECT MAX(i.position)+1 FROM items i WHERE i.list_id=12), list_id=12 这是可行的,但是对于位置,如果SELECT语句返回一个空集,我想插入一个0。这是否可以在一个查询中完成(这样我就可以避免使用事务)?使用CAS
INSERT INTO items
SET item_name="apple",
position=(SELECT MAX(i.position)+1 FROM items i WHERE i.list_id=12),
list_id=12
这是可行的,但是对于
位置
,如果SELECT语句返回一个空集,我想插入一个0。这是否可以在一个查询中完成(这样我就可以避免使用事务)?使用CASE
检查您是否有任何位置,方法是执行为NULL
。如果没有,请使用0
INSERT INTO items
SET item_name="apple",
position=( CASE WHEN (SELECT MAX(i.position)+1 FROM items i WHERE i.list_id=12) IS NULL
THEN 0 ELSE (SELECT MAX(i.position)+1 FROM items i WHERE i.list_id=12) END ) ,
list_id=12
看
尽管这样做有效,但请参阅@criticalfix的更好答案和两者的演示。使用CASE
通过执行为空检查您是否有任何位置。如果没有,请使用0
INSERT INTO items
SET item_name="apple",
position=( CASE WHEN (SELECT MAX(i.position)+1 FROM items i WHERE i.list_id=12) IS NULL
THEN 0 ELSE (SELECT MAX(i.position)+1 FROM items i WHERE i.list_id=12) END ) ,
list_id=12
看
尽管这是可行的,但请参阅@criticalfix的更好答案和两者的演示。尝试COALESCE():
尝试合并():
谢谢,我不知道COALESCE()。谢谢,我不知道COALESCE()。