Ввод данных в таблицу из двух разных таблиц

#sql

#sql

Вопрос:

У меня есть эти 3 таблицы с данными

 SQLgt; select * from subject;    SUBJECTID LNAME FNAME PROJID ---------- ------------ ---------- ----------  10011 Indy Eva XYZ01  20022 Jordan Sam XYZ01  30033 Jordan Mary XYZ01  40044 Belmont Renee XYZ02  50055 Pissaro Becky XYZ02  60066 Nadal Becky XYZ03  70077 Bardot Brigitte XYZ03  80088 null Eva XYZ03  90099 Garnet Larry XYZ04  10111 Isner Monica XYZ04  11011 Dupont Marty XYZ05  11 rows selected.  SQLgt; select * from project;  PROJID MEDICNAME PURPOSE START_DATE END_DATE PI_ID ---------- ---------- ------------ ----------- ----------- ---------- XYZ02 Medic1 diabetes 01-oct-2018 31-jul-2022 10001 XYZ01 Medic1 foot 01-sep-2019 31-jul-2021 10001 XYZ04 Medic3 spleen 10-jan-2019 31-jul-2021 10001 XYZ05 Medic5 spleen 10-jul-2020 1-jan-2021 10002 XYZ03 Medic3 lung 01-nov-2016 31-dec-2022 10002  SQLgt; select * from researcher;   PID LNAME FNAME ---------- ------------ ----------  10001 Elgar Dawn  10002 Jordan Daniel  10003 Jordan Athena  10004 Rivers Karen  10005 Gomez Tracy  10006 Gomez Jenny  10007 Perry Eva  10008 McHale Vicky  8 rows selected.   

а затем создал третью таблицу, которая выглядит следующим образом

 SQLgt; CREATE TABLE n_subject  2 (SubjID number(7),  3 Lastname varchar2(12),  4 Firstname varchar2(10));  

Я хочу заполнить свою новую таблицу Субъектами, которые участвовали в проектах, возглавляемых Доном Элгаром (PID-10001). Есть ли способ сделать это через 3 таблицы? Я близок к коду, который выглядит так

 SQLgt; insert into n_subject (subjid, lastname, firstname)  2 select subjectid, lname, fname  3 from subject where projid = 'XYZ01' or projid = 'XYZ02' or projid = 'XYZ04';  

но вместо этого я пытаюсь получить данные во всех трех таблицах, используя идентификатор проекта и PID. Возможно ли это?

Комментарии:

1. Подсказка : UNION ALL .

Ответ №1:

вы можете использовать инструкцию select с внутренним соединением

 INSERT INTO n_subject  (subjid, lastname, firstname) SELECT subjectid,  lname,  fname FROM [subject]  JOIN [project]  ON [project].projid = [subject].projid WHERE [project].pi_id = '10001';   

Комментарии:

1. Это было именно то, что я искал. Просто не мог до конца это понять. Большое вам спасибо!

2. Смогли бы вы использовать оператор «присоединиться» более одного раза, если бы вам пришлось перейти, скажем, за другую таблицу?

3. да, любое действительное select утверждение будет действительным с insert into утверждением, если столбцы обоих утверждений совпадают @Eddie14