2013-08-30 56 views
2

一个,我希望,简单的问题,我很遗憾地找不到谷歌搜索或RTFMing的答案。基于另一个表的第一个ID创建DEFAULT

我想创建一个具有基于另一个表的第一个ID的默认值的列。

类似的东西,这可悲的是给了我“错误:在默认的表达式不能使用子查询”

ALTER TABLE foobar 
     ADD COLUMN foo INTEGER DEFAULT (SELECT id FROM blubb LIMIT 1); 

的问题是,我不能简单地认为“blubb”开始于0或1,我想稍后再加上CONSTRAINT。

+0

'LIMIT 1'并不意味着 “第一” 的ID。它意味着“只有一排,任何一排”。直到你提供一个'ORDER BY'子句。 –

+0

你想成为表foobar的安装时间**(即执行你的'ALTER TABLE'命令)时blubb.id **的值或者blubb.id **的值的默认值在foobar中插入一个新值? – contradictioned

+0

请插入。 – BastetFurry

回答

5

简单的答案:使用一个函数。

实施例:

CREATE TABLE foo (id serial primary key); 

    CREATE OR REPLACE FUNCTION max_foo() RETURNS int LANGUAGE SQL AS 
    $$ SELECT max(id) FROM foo; $$; 

    CREATE TABLE bar(id int not null default max_foo()); 
相关问题