当一列是变量值时,如何在Postgresql 8.4中插入行?

| 我想为\“ author \”表中的每个作者将记录插入\“ books \”表中。换句话说,如果这代表了作者表:
> 1 - \"Herman Melville\" 
> 2 - \"Stephen King\" 
> 3 - \"Truman Capote\"
...然后,插入将在\“ book \”表中产生以下结果:
> \'Hello World\' - 1
> \'Hello World\' - 2
> \'Hello World\' - 3
我有以下INSERT语句(它实际上是一个粗略的示例,但它演示了目标):
INSERT INTO books (title, author_id) VALUES (\'Hello World\', SELECT id FROM author);
不幸的是,这失败了,我不确定如何从“作者”表中获取每个“ id”值。     
已邀请:
        目前尚不清楚为什么要为每个作者插入相同的条目,但是您可以使用SELECT作为INSERT的源,如下所示:
INSERT INTO books (title, author_id)
    SELECT \'Hello World\', id
    FROM author
编辑:有关更多信息,请检查INSERT文档;如您所见,源可以是DEFAULT VALUES,VALUES或查询。     
        您可以使用以下一种:
INSERT INTO books (title, author_id) SELECT \'Hello World\', id FROM author;
    
        您还可以在子选择项周围加上括号:
 INSERT INTO books (title, author_id) 
  VALUES (\'Hello World\',  (SELECT id FROM author WHERE...) );
这种语法可能最容易理解,但是其他注释程序(没有VALUES)指出的另一种语法可能更干净:您只需将要插入的记录(使用SELECT)构建出来,然后插入它;如果您对Distict字段有许多子选择,它也可能更有效。     
        
INSERT INTO books (title, author_id) SELECT \'Hello World\', id FROM author
    

要回复问题请先登录注册