2016-09-22 66 views
0

我不得不加入2代表與SQL以特殊的方式:加入2代表與SQL

TABLE1有田組和成員,TABLE2有田集團和MASTER。 我必須通過將TABLE1複製到TABLE3並搜索TABLE2(如果從TABLE1有一個GROUP並且如果將GROUP和MASTER複製到TABLE3)來創建具有字段GROUP和ID的新TABLE3。

例子:

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 ing很清楚。

那麼什麼是SQL查詢?

感謝,海因

+0

看看「工會」。 –

+1

您正在使用哪些DBMS? –

回答

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;