使用默认值插入多行而不使用union

时间:2015-05-20 15:16:30

标签: mysql sql

我使用此查询在表user中插入多行。

 insert into user 
  (select 'bbb', coalesce(max(subid),0)+1 from user where name = 'bbb')
  union
  (select 'ccc', coalesce(max(subid),0)+1 from user where name = 'ccc');

如何在单个select查询中获得相同的结果?

1 个答案:

答案 0 :(得分:3)

不完全。问题是当名称不在表中时会发生什么。你可以这样做:

insert into user(name, subid)
    select n.name, coalesce(max(u.subid), 1)
    from (select 'bbb' as name union all select 'ccc') n left join
         user u
         on u.name = n.name
    group by u.name;

它仍然有一个union (all)来构建名称,但subid的计算只表示一次。

使用insert时,最好明确列出列。