我使用此查询在表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
查询中获得相同的结果?
答案 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
时,最好明确列出列。