代码之家  ›  专栏  ›  技术社区  ›  johnny-b-goode

在Oracle中连接多对多时,如何不复制没有子级的列?

  •  0
  • johnny-b-goode  · 技术社区  · 6 年前

    有两张桌子,可以放很多A,B。 WHERE子句返回表A中的两行。第一行有两个子级,第二行为零。左联接B表后,查询返回四行:第一行由于子行而重复,第二行也重复。是否可以避免第二个记录的重复?

    SELECT ID, CODE FROM A;
    1, 1
    2, 2
    
    SELECT ID, CODE, DEPARTMENT FROM A LEFT JOIN B ON A.ID = B.ID
    
    1, 1, DEP1
    2, 2, NULL
    1, 1, DEP2
    2, 2, NULL
    

    寻找:

    1, 1, DEP1
    1, 1, DEP2
    2, 2, NULL
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   Lukas Eder    6 年前

    你的 特别 问题可以通过应用来解决 DISTINCT :

    SELECT DISTINCT ID, CODE, DEPARTMENT FROM A LEFT JOIN B ON A.ID = B.ID
    

    请注意,它适用于您的 特别 查询,但一旦查询变得更复杂,它可能会删除太多的行。另一个选择是:

    SELECT ID, CODE, DEPARTMENT 
    FROM A 
    LEFT JOIN (SELECT DISTINCT ID, DEPARTMENT FROM B) B ON A.ID = B.ID
    

    但我怀疑你有一个数据建模问题,因为你可能不应该有那些重复的记录 ID = 2 在表格中 B 首先。