MySQL根据条件插入不同的值

时间:2013-09-10 15:42:00

标签: mysql

我在MySQL中有以下查询。这会将新项目插入到列表中,其中新项目的位置设置为大于当前最大位置的位置。

INSERT INTO items
SET item_name="apple",
    position=(SELECT MAX(i.position)+1 FROM items i WHERE i.list_id=12),
    list_id=12

这样可行,但对于position,如果SELECT语句返回空集,我想插入0。这可以在一个查询中执行(这样我可以避免使用事务)吗?

2 个答案:

答案 0 :(得分:2)

尝试COALESCE():

INSERT INTO items
SET item_name="apple",
position=COALESCE((SELECT MAX(i.position)+1 FROM items i WHERE i.list_id=12), 0),
list_id=12

答案 1 :(得分:1)

使用CASE通过执行position来检查您是否有IS 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

请参阅demo


虽然这有效,但请参阅@keyfix的更好答案以及here的演示。