【问题标题】:SQL JOIN avoid duplicate in column valueSQL JOIN 避免列值重复
【发布时间】:2019-11-30 05:23:23
【问题描述】:

我正在尝试创建一个在特定列上加入的视图。当其中 1 个表中存在连接列上的重复项时,连接会复制对面表中没有重复项的值。我需要显示这些值,但只匹配一次,如果找到第二个匹配项,非重复表应显示为空。有可能吗?

CREATE VIEW view1 AS
SELECT A.id as id_a, B.id as id_b   
FROM table1 A
FULL OUTER JOIN table2 B ON  A.columnX = B.columnX --- the duplicate is in this column

【问题讨论】:

    标签: sql join view duplicates


    【解决方案1】:

    是的,这当然是可能的。你可以做一个left join,像这样:

    select A.id as id_a, B.id as id_B, A.columnX
    from table2 B
    left join table1 A
    on (A.columnX = B.columnX) and
    (not exists (select 1
                 from table2 B2
                 where B2.columnX = B.columnX and B2.id < B.id)
    )
    

    基本上,我们在on 子句中添加了不存在具有较小id 的匹配项

    【讨论】:

      【解决方案2】:

      你不想这样做! SQL 表代表 无序 集合。查询和视图也是如此。事实上,即使您在视图中包含ORDER BY,也不能保证以任何特定顺序返回结果。

      问题在于解释结果需要遵循行的顺序。 NULL 的 id 值取决于它“上方”的任何 id,但您无法控制它。

      更糟糕的是,您使用的是FULL JOIN,因此您可能会从JOIN 本身获得NULL 值。

      根本不推荐你想做的事!

      【讨论】:

      • 推荐的方法是什么?
      • @aruydzi1 。 . .包括每一行的完整信息。
      • 这是不可能的,因为每个 id 都来自不同的系统,并且可能存在仅存在于 1 个系统中的值
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-12
      • 1970-01-01
      • 2018-12-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多