Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL根据条件插入不同的值_Mysql - Fatal编程技术网

MySQL根据条件插入不同的值

MySQL根据条件插入不同的值,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

我在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。这是否可以在一个查询中完成(这样我就可以避免使用事务)?

使用
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()。