我有一个包含2列的表(table2):name和age。 我有另一个表(table1),其中包含列名,年龄,值,类型。
我想更新table1,添加table2值,value = 1,type =“abc”。
我试过了:
方法1:
insert into table1(select * from table2), 1, 'abc';
但是在1之前得到错误','说子查询不能返回多个列。
方法2:
CREATE TABLE table2
(
name varchar(20),
age varchar(20)
);
insert into table2 .... inserted some values
alter table table2 add "value" varchar(10);
alter table table2 add "name" varchar(20);
update table2 set value=1, name='abc';
insert into table1 select * from table2;
我正在使用PostgreSQL。任何人都可以帮我解决问题。方法2有效,但我认为这不是有效的方式。
答案 0 :(得分:1)
INSERT INTO table1
SELECT table2.*, 1, 'abc'
FROM table2;
*表示法是引用表的所有列的快捷方式,但如果愿意,您仍可以添加更多列,例如常量。
答案 1 :(得分:0)
对于方法1: 由于子查询为单个插入返回多个值,因此会显示错误。
方法2:
此方法有效,因为您创建表2与表1相同,然后将表2中的所有值插入Table1。如果你这样做,为什么你必须维护两个单独的表来保存相同的数据?
您可以使用光标来解决此问题。
CREATE PROCEDURE USER_DATA_CURSOR
AS
DECLARE MY_CURSOR
FOR
Select name,age From table2
Open My_Cursor
DECLARE @name varchar(20), @age varchar(20)
Fetch NEXT FROM MY_Cursor INTO @name, @age
While (@@FETCH_STATUS <> -1)
BEGIN
IF (@@FETCH_STATUS <> -2)
insert into table1(name,age,type,value) values(@name,@age,'abc',1);
FETCH NEXT FROM MY_CURSOR INTO @name, @age
END
CLOSE MY_CURSOR
DEALLOCATE MY_CURSOR
GO
Exec USER_DATA_CURSOR
代码不是Postgresql特有的,你可能需要相应调整它。如果您还有其他问题,请与我们联系