【问题标题】:Postgresql relations joiningPostgresql 关系加入
【发布时间】:2013-07-19 04:24:19
【问题描述】:

我有两个关系relation1 和relation2,其中relation1 有A、B、C 列,relation2 有D、E、F 列。对于查询,我正在对 C=F 上的关系 1 和关系 2 进行完全连接。

SELECT A,B,C,D,E,F 
  FROM relation1 r1 FULL JOIN relation r2 
    ON r1.C=r2.F

所以当C=F时,结果包含

A,B,C,D,E,F values

当C不在F中时结果包含

A,B,C, null,null,null

当 F 不在 C 中时结果包含

null,null,null,D,E,F

这是我所期望的。现在我想做 C,F 在结果中用相同的名称(M)标识。所以当 C=F 时,结果包含

A,B,M,D,E values

当C不在F中时结果包含

A,B,M, null,null,null

当 F 不在 C 中时结果包含

null,null,null,D,E,M

如何获得?

【问题讨论】:

    标签: sql database postgresql postgresql-9.1


    【解决方案1】:

    你在找这个吗?

    SELECT A, B, D, E, COALESCE(C, F) M 
      FROM relation1 r1 FULL JOIN relation2 r2 
        ON r1.C = r2.F
    

    假设关系1:

    |一个 |乙| C | --------------- | a1 | b1 | 1 | | a2 | b2 | 2 |

    和关系2:

    | D | E | F | --------------- | d1 | e1 | 1 | | d3 | e3 | 3 |

    输出将是

    |一个 |乙| D | E |中号 | ----------------------------------------- | a1 | b1 | d1 | e1 | 1 | | a2 | b2 | (空) | (空) | 2 | | (空) | (空) | d3 | e3 | 3 |

    这里是SQLFiddle演示

    【讨论】:

    • @RagavanThiru 有帮助吗?
    【解决方案2】:

    您可以在查询中使用别名,即 C 作为 M 和 F 作为 M

    【讨论】:

      【解决方案3】:
      SELECT A,B,
        case when C is not null then M end,
        D,E,
        case when F is not null then M end
      FROM relation1 r1 
        FULL JOIN relation r2 
      ON r1.C=r2.F
      

      除非 M 只是一个别名然后

      SELECT A,B,C as M, D,E, F as M
      FROM relation1 r1 
        FULL JOIN relation r2 
      ON r1.C=r2.F
      

      【讨论】:

        【解决方案4】:

        没有办法SELECT 列表中出现两次M(作为名称)。输出列名必须是唯一的。

        通常我更喜欢@peterm's solutionCOALESCE() (like I answered to your last question)。
        这是使用子查询和USING clause for the JOIN condition 实现相同目的的另一种方法。

        SELECT A, B, D, E, M 
        FROM      (SELECT A, B, C AS M FROM relation1) r1
        FULL JOIN (SELECT D, E, F AS M FROM relation2) r2 USING (M)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-11-18
          • 1970-01-01
          • 2014-02-24
          • 2018-11-27
          • 1970-01-01
          • 1970-01-01
          • 2022-01-25
          相关资源
          最近更新 更多