Выберите несколько столбцов из одной таблицы, получите соответствующие данные из другой таблицы и вставьте их в другую таблицу - PullRequest
0 голосов
/ 25 января 2020

Основная таблица: содержит всю подробную информацию, такую ​​как Proper_ID и Proper_Name и другие поля.

Родительская таблица: в ней нет единственного идентификатора для матери и отца. Proper_ID и Proper_Name

Дочерняя таблица: Необходимость Вставить Proper_ID и Proper_Name в том же порядке, что и родительский, и избегайте дублирования записей.

Master_Table
---------------------------------------------------------------
Proper_ID | Proper_Name | Proper_Address | Proper_Phone |Proper_Zipcode
----------------------------------------------------------------
ABC_235 | Pansy Montgomery | 427 Preston Court| 1234| 5679
KWH_631 | Price Maxwell | 164 Conduit Boulevard| 8782| 7893
DEA_124 | Howard Kelly | 314 Agate Court| 3234| 1529
FAE_832 | Best Mcpherson | 325 Dorchester Road| 1582| 1861


Parent_Table
---------------------------------------------------
M_ID | F_ID | Picture_URL | Age_Group | Email
---------------------------------------------------
235| 832 | http://placehold.it/32x32| 45 | espinozastrickland@accruex.com
631| 124 | http://placehold.it/32x32| 50 | roycooke@concility.com

Output Expected:
Child_Table
---------------------------------------------------
Mother_ID | Mother_Name | Father_ID | Father_Name
---------------------------------------------------
ABC_235 | Pansy Montgomery | FAE_832 | Best Mcpherson
KWH_631 | Price Maxwell | DEA_124| Howard Kelly 


select mt.proper_id, mt.proper_name from master_table mt, parent_table pt
where mt.proper_id in (pt.m_id, pt.f_id)

proper_id | proper_name
-------------------------
ABC_235 | Pansy Montgomery
FAE_832 | Best Mcpherson
KWH_631 | Price Maxwell  
DEA_124| Howard Kelly 

1 Ответ

1 голос
/ 25 января 2020

Вы можете создать Child_Table с помощью оператора CREATE ... SELECT. Вам нужно JOIN от Parent_Table до Master_Table дважды, один раз, чтобы получить данные матери, и один раз, чтобы получить данные отца. Обратите внимание, что вы должны использовать синтаксис соединения ANSI, объединения запятых давно заменены.

CREATE TABLE Child_Table AS
SELECT m1.Proper_ID AS Mother_ID,
       m1.Proper_Name AS Mother_Name,
       m2.Proper_ID AS Father_ID,
       m2.Proper_Name AS Father_Name
FROM Parent_Table p
JOIN Master_Table m1 ON SUBSTRING_INDEX(m1.Proper_ID, '_', -1) = p.M_ID
JOIN Master_Table m2 ON SUBSTRING_INDEX(m2.Proper_ID, '_', -1) = p.F_ID

Тогда вы можете

 SELECT *
 FROM Child_Table

Вывод:

Mother_ID   Mother_Name         Father_ID   Father_Name
KWH_631     Price Maxwell       DEA_124     Howard Kelly
ABC_235     Pansy Montgomery    FAE_832     Best Mcpherson

Демонстрация по SQLFiddle

Если вы только Если вы хотите сгенерировать одну строку для данной пары значений M_ID и F_ID, вы можете поместить индекс UNIQUE в Mother_ID, Father_ID в Child_Table в операторе CREATE, а затем либо IGNORE дублировать, либо REPLACE их:

CREATE TABLE Child_Table (UNIQUE(Mother_ID, Father_ID)) IGNORE
... -- as above

Демонстрация по SQLFiddle

...