2016-09-22 69 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;