0

我在 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

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

4

2 回答 2

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
于 2013-09-10T15:53:22.077 回答
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

演示


虽然这可行,但请参阅@criticalfix 的更好答案和此处的演示。

于 2013-09-10T15:51:37.217 回答