2016-09-22 4 views
0

Я должен соединить 2 таблицы с SQL особым образом:соединить 2 таблицы с SQL

TABLE1 имеет группу полей и член, TABLE2 имеет поля GROUP и MASTER. Мне нужно создать новую таблицу TABLE3 с полями GROUP и ID, скопировав ТАБЛИЦУ 1 в ТАБЛИЦУ 3 и выполнив поиск таблицы 2, если есть ГРУППА из ТАБЛИЦЫ 1 и если, скопируйте GROUP и MASTER в ТАБЛИЦУ3.

Пример:

table1:

group member 
1  a 
1  b 
1  c 
2  x 
3  y 

table2:

group master 
3  n 
3  z 
1  k 
9  v 
2  m 
7  o 
8  p 

Ожидаемый результат, Таблица3:

group id 
1  a  from table1 
1  b  from table1 
1  c  from table1 
1  k  from table2 
2  x  from table1 
2  m  from table2 
3  y  from table1 
3  z  from table2 
3  n  from table2 

Я надеюсь everyth ясно.

Так что же такое SQL-запрос?

Спасибо, Hein

+0

Посмотрите на «союз». –

+1

Какая СУБД вы используете? –

ответ

0

Первая часть (члены копии) должны быть легко:

INSERT INTO table3 (group, id) SELECT group, member FROM table1; 

Тогда Вы просто скопировать мастеров, которые находятся в группах, которые уже присутствуют в table1:

INSERT INTO table3 (group, id) SELECT group, master FROM table2 WHERE group IN (SELECT DISTINCT group FROM table1); 
+2

Нет необходимости в этом DISTINCT в подзапросе. – jarlh

0

Попробуйте это. Конечно, вам нужно ВСТАВИТЬ весь выбор в свою новую таблицу с именем Table3.

WITH TABLE1(GRP,MMBR) AS 
(SELECT 1, 'a' FROM DUAL UNION ALL 
    SELECT 1, 'b' FROM DUAL UNION ALL 
    SELECT 1, 'c' FROM DUAL UNION ALL 
    SELECT 2, 'x' FROM DUAL UNION ALL 
    SELECT 3, 'y' FROM DUAL), 
TABLE2(GRP,MSTR) AS 
(SELECT 3, 'n' FROM DUAL UNION ALL 
    SELECT 3, 'z' FROM DUAL UNION ALL 
    SELECT 1, 'k' FROM DUAL UNION ALL 
    SELECT 9, 'v' FROM DUAL UNION ALL 
    SELECT 2, 'm' FROM DUAL UNION ALL 
    SELECT 7, 'o' FROM DUAL UNION ALL 
    SELECT 8, 'p' FROM DUAL) 

SELECT * FROM (
    SELECT GRP, MMBR ID FROM TABLE1 

    UNION --UNION ALL if you need duplicates 

    SELECT GRP, MSTR ID FROM TABLE2 
    WHERE TABLE2.GRP IN (SELECT GRP FROM TABLE1) 
) 
    ORDER BY GRP, ID 
0

Вы можете сделать это с помощью UNION ALL и 2 просто SELECT в INSERT следующим образом:

INSERT INTO table3(group,id) 
SELECT group,id FROM table1 
UNION ALL 
SELECT group,id FROM table2 
SELECT * FROM table3; 

И если вы не хотите, повторяющиеся значения, попробуйте это с помощью UNION вместо UNION ALL:

INSERT INTO table3(group,id) 
SELECT group,id FROM table1 
UNION 
SELECT group,id FROM table2 
SELECT * FROM table3; 
Смежные вопросы