代码之家  ›  专栏  ›  技术社区  ›  TomB

返回重复行但在两次引用同一表时列值翻转的SQL

  •  0
  • TomB  · 技术社区  · 6 年前

    我试图使用公共ID将一个表与其自身连接起来,以查找某个列不相等的实例。我的问题是,我的脚本返回了几乎重复的行,但返回的列中的值被交换了(因此distinct将不起作用)。

    例如:

    Select distinct t1.ID, t1.Value V1, t2.Value V2
    from t1, t2
    where t1.ID = t2.ID 
    and t1.Value <> t2.Value
    

    这将返回:

    ID  V1  V2
    1   A   B
    2   B   A
    

    当我想返回单行时:

    ID  V1  V2
    1   A   B
    
    2 回复  |  直到 6 年前
        1
  •  2
  •   Gordon Linoff    6 年前

    我可以建议你吗?

    Select t1.ID, t1.Value as V1, t2.Value as V2
    from t1 join
         t2
         on t1.ID = t2.ID and
            t1.Value < t2.Value;
    

    请注意,更改为 < 而不是 <> .

        2
  •  0
  •   Lukasz Szozda    6 年前

    你可以使用 LEAST/GREATEST 功能:

    SELECT DISTINCT t1.ID,
         LEAST(t1.Value , t2.Value)   AS V1,
         GREATEST(t1.Value, t2.Value) AS V2
    FROM t1
    JOIN t2
      ON t1.ID = t2.ID 
    WHERE t1.Value <> t2.Value;
    

    DBFiddle Demo