仅当列的值与前一个值不同时,如何增加序列? PostgreSQL的

时间:2015-03-30 12:47:44

标签: postgresql sequence

正如主题一样。举个简单的例子,我有桌子:

Cars(
    TEXT make,
    INTEGER value,
    TEXT owner
);

有这样的记录:

('BMW', 100000, 'AcmeCompany')
('BMW', 350000, 'XCompany')
('Lamborgini', 500000, 'YCompany')
('Fiat', 30000, 'ZCompany')
('BMW', 200000, 'XCompany')

我希望创建包含makeID列的表格(不要问为什么,它只是一个例子:P)

Informations(
    INTEGER makeID
    other_stuff
)

我在makeID上有序列,只有在我的SELECT中有新的make in值时才需要增加序列(它就像从字符串到整数的transtalion;如果有可能我不想要sha1或其他加密事物只是一个简单的序列!)

   INSERT INTO Informations(makeID) ( 
        -- IF I have new value: SELECT nextVal('mysequence')
        -- ELSE : SELECT currval('mysequence')
   )

我知道应该可以通过pgsql函数(按' make'列排序表,然后将' make'的最后一个值保存到临时变量中并使用检查值执行INSERT INTO我的实际' make'值是否为temp值,用于递增序列变量)。但是有更简单的方法,只是通过查询? join,sort和distinct的组合?

1 个答案:

答案 0 :(得分:0)

不确定我理解。它只是serial select distinct

create table make (
    make_id serial,
    make_brand text,
    make_owner text
);
insert into make (make_brand, make_owner)
select distinct make, owner
from cars;