如何插入下一个最高的数字

时间:2014-10-10 05:29:09

标签: sql postgresql postgresql-9.3

我有一个带有id,tableid和seqnum的表。这是表结构:

create table ztables
(
   id serial primary key,
   tableid integer,
   seqnum integer
)

和样本数据

+----+---------+-------+
| id | tableid | seqnum|
+----+---------+-------+
| 1  | 5       | 1     |
+----+---------+-------+
| 2  | 5       | 2     |
+----+---------+-------+
| 3  | 5       | 3     |
+----+---------+-------+
| 4  | 5       | 9     |
+----+---------+-------+
| 5  | 6       | 1     |
+----+---------+-------+
| 6  | 7       | 1     |
+----+---------+-------+
| 7  | 7       | 2     |
+----+---------+-------+
| 8  | 7       | 3     |
+----+---------+-------+

让我们以tableid 5为例。您可以看到序列号增加类似于数据库序列。但它不应该增加整个表格。我只希望它增加每个tableid。因此,如果插入另一个带有tableid 5的记录,则seqnum将为10.如果插入了带有tableid 7的记录,则seqnum将为4.执行此类操作的正确方法是什么。我也需要考虑并发问题。

1 个答案:

答案 0 :(得分:0)

也许这可以帮助您或至少为您提供解决方案的想法:

insert into ztables (
  id,
  tableid,
  seqnum
)
select ? as id,
       tableid,
       max(seqnum) + 1 as seqnum
  from ztables 
 where tableid = ?
 group 
    by tableid
 union
select ? as id,
       ? as tableid,
       1 as seqnum
  from ztables
 order
    by 3 desc
 limit 1; 

问号必须由常数值替换。