Если sno
в table_2
имеет последовательность или является последовательным столбцом, попробуйте это
Пример данных
CREATE TABLE table_1 (person_id int, day_of_birth int, month_of_birth int, gender text);
INSERT INTO table_1
VALUES (4,17,7,'M'),
(2,15,3,'F');
CREATE TABLE table_2 (sno serial, person_id int, date_1 date, date_2 date, dept text);
INSERT INTO table_2 (person_id, date_1, date_2, dept)
VALUES (1,'1990-02-27','2020-03-13','A'),
(3,'1990-02-28','2020-02-14','B');
Вставить запрос
INSERT into Table_2 (person_id,date_1,date_2,dept)
SELECT person_id,
TO_DATE('1900-01-01', 'YYYY-MM-DD'),
TO_DATE('2900-12-30', 'YYYY-MM-DD'),'F'
FROM Table_1 WHERE person_id NOT IN (SELECT person_id FROM Table_2);
Результат
SELECT * FROM table_2;
sno | person_id | date_1 | date_2 | dept
-----+-----------+------------+------------+------
1 | 1 | 1990-02-27 | 2020-03-13 | A
2 | 3 | 1990-02-28 | 2020-02-14 | B
3 | 4 | 1900-01-01 | 2900-12-30 | F
4 | 2 | 1900-01-01 | 2900-12-30 | F
(4 Zeilen)
Редактировать (см. Комментарии)
Создать sequence
CREATE SEQUENCE seq_sno START WITH 3;
После этого просто поместите его во вставку, используя nextval
INSERT INTO Table_2 (sno, person_id,date_1,date_2,dept)
SELECT nextval('seq_sno'),person_id,
TO_DATE('1900-01-01', 'YYYY-MM-DD'),
TO_DATE('2900-12-30', 'YYYY-MM-DD'),'F'
FROM Table_1 WHERE person_id NOT IN (SELECT person_id FROM Table_2);
SELECT * FROM table_2;
sno | person_id | date_1 | date_2 | dept
-----+-----------+------------+------------+------
1 | 1 | 1990-02-27 | 2020-03-13 | A
2 | 3 | 1990-02-28 | 2020-02-14 | B
3 | 4 | 1900-01-01 | 2900-12-30 | F
4 | 2 | 1900-01-01 | 2900-12-30 | F
(4 Zeilen)