【问题标题】:join 2 tables with SQL用 SQL 连接 2 个表
【发布时间】:2016-09-22 08:03:54
【问题描述】:

我必须以一种特殊的方式用 SQL 连接 2 个表:

TABLE1 具有字段 GROUP 和 MEMBER,TABLE2 具有字段 GROUP 和 MASTER。 我必须通过将 TABLE1 复制到 TABLE3 并搜索 TABLE2 来构建一个包含字段 GROUP 和 ID 的新 TABLE3,如果存在来自 TABLE1 的 GROUP,如果将 GROUP 和 MASTER 复制到 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

预期结果,table3:

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

我希望一切都清楚。

那么什么是 SQL 查询?

谢谢,海因

【问题讨论】:

  • 看看“联合”。
  • 您使用的是哪个 DBMS?

标签: sql


【解决方案1】:

第一部分(复制成员)应该很简单:

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);

【讨论】:

  • 子查询中不需要那个 DISTINCT。
【解决方案2】:

试试这个。当然,您需要将整个选择插入到名为 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

【讨论】:

    【解决方案3】:

    您可以在INSERT 中使用UNION ALL 和2​​ 个简单的SELECT,如下所示:

    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;
    

    【讨论】:

      猜你喜欢
      • 2018-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-05
      • 1970-01-01
      • 1970-01-01
      • 2013-09-03
      • 2022-12-22
      相关资源
      最近更新 更多