Для метода 1: поскольку подзапрос возвращает несколько значений для одной вставки, появляется ошибка.
Метод 2:
Этот метод работает, потому что вы создаете таблицу 2, аналогичную таблице 1, а затем вставляете все значения из таблицы 2 в таблицу 1.Если вы делаете это, то почему вы должны поддерживать две отдельные таблицы для хранения одинаковых данных?
Вы можете использовать курсор для решения этой проблемы.
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, возможно, вам придется соответствующим образом его настроить.Дайте мне знать, если у вас есть еще вопросы