我想在postgres做这样的事情:
UPDATE table1 SET (col1, col2) = (SELECT col2, col3 FROM othertable WHERE othertable.col1 = 123);
INSERT INTO table1 (col1, col2) VALUES (SELECT col1, col2 FROM othertable)
但是,即使使用文档中提到的postgres 9.0,也不可能获得第1点(http://www.postgresql.org/docs/9.0/static/sql-update.html)
点2似乎也不起作用.我收到以下错误:子查询必须只返回一列.
希望有人为我找到解决方法.否则查询将花费时间:(.
仅供参考:我正在尝试从多个表中选择不同的列并将它们存储到临时表中,以便其他应用程序可以轻松获取准备好的数据.
我相信标题是不言自明的.如何在PostgreSQL中创建表结构以建立多对多关系.
我的例子:
Product(name, price);
Bill(name, date, Products);
Run Code Online (Sandbox Code Playgroud) 我正在使用Postgres 9.3构建一个数据库作为后端,有3个表:
table1 (user_id, username, name, surname, emp_date)
table2 (pass_id, user_id, password)
table3 (user_dt_id, user_id, adress, city, phone)
Run Code Online (Sandbox Code Playgroud)
可以看出table2并且table3是儿童表table1.
我可以user_id在table1(父)中提取新插入的行:
INSERT INTO "table1" (default,'johnee','john','smith',default) RETURNING userid;
Run Code Online (Sandbox Code Playgroud)
我需要将新提取的id(from table1)插入到这些表的唯一user_id列中table2以及table3其他数据中.基本上3 X INSERT ......
我该怎么做?
我通过以下方式制作了一张临时表:
create temporary table return_table
(
p1 BIGINT,
p2 VARCHAR(45),
p3 VARCHAR(45),
p4 VARCHAR(45),
p5 VARCHAR(45),
p6 float,
p7float
) on commit drop;
Run Code Online (Sandbox Code Playgroud)
我试图采取2个选择语句并将数据插入该临时表.例如,我有一个名为t1的表,它提供前四个值,然后我希望临时表的后三个值来自另一个表.
到目前为止,我有:
insert into return_table
(Select var1, var2, var3, var4
from t1 where var1 = 10)
Run Code Online (Sandbox Code Playgroud)
这将成功地将4个值放入我的临时表中,然后将其余值保留为null.那没关系,所以当我尝试从另一个表中插入最后三个变量时.例如
insert into return_table
(Select var1, var2, var3, var4
from t1 where var1 = 10, Select var5, var6, var 7
from t2 where var6 = 25)
Run Code Online (Sandbox Code Playgroud)
它会引发语法错误.我已经尝试了一些其他的语法更改,但我无法弄清楚在同一行中插入这些select语句的两个结果的正确语法.
任何帮助都会很棒!
在DB2中,我可以执行一个看起来像这样的命令来从插入的行中检索信息:
SELECT *
FROM NEW TABLE (
INSERT INTO phone_book
VALUES ( 'Peter Doe','555-2323' )
) AS t
Run Code Online (Sandbox Code Playgroud)
我如何在Postgres中做到这一点?
有办法检索序列,但我需要检索任意列.
我希望将选择与插入合并是出于性能原因.这样我只需要执行一个语句来插入值并从插入中选择值.插入的值来自subselect而不是values子句.我只需要插入1行.
该示例代码取自维基百科插入文章
postgresql ×5
sql ×4
database ×1
insert ×1
many-to-many ×1
select ×1
sql-insert ×1
sql-update ×1