【问题标题】:Outer join and unique records in each table每个表中的外连接和唯一记录
【发布时间】:2018-12-06 23:34:08
【问题描述】:
TableA
------
IntId   EvId    Name    Phone1
=====   ====    ====    ======
100     aaa     xxx     11111
101     bbb     yyy     22222
102     ccc     zzz     33333
103     bbb     asd     44444
104     bbb     sdf     55555


TableB
------
IntId   ASId    Grp     Phone2
=====   ====    ====    ======
201     bbb     yyy     6666
202     ccc     zzz     7777
203     bbb     asd     8888
204     bbb     kkf     9999
205     ddd     esd     0000
206     eee     ffr     1001

我想使用 TableA.EvId = TableB.ASId 将 TableA 与 TableB 连接起来以输出 {IndId, EvId, Name, Phone1, Grp, Phone2}(使用外连接,因为我希望 TableA 中的所有记录都具有匹配的 TableB 列) 我可以使用下面的查询来做到这一点,但它给了我重复,因为 EvId 和 ASId 有重复。

SELECT a.IntId, a.EvId, a.Name, a.Phone1, b.Grp, b.Phone2
    FROM TableA a
    LEFT OUTER JOIN TableB b
    ON a.EvId = b.ASId

如果 EvId 重复,请考虑具有最大 IntId 的记录。 TableB 的规则相同

我的最终输出应该是这样的 - TableA 中所有唯一的 EvId 都使用 B 上的外连接

IntId   EvId    Name    Phone1      Phone2      Grp
100     aaa     xxx     11111       null        null
104     bbb     sdf     55555       9999        kkf
102     ccc     zzz     33333       7777        zzz

你能帮我查询一下吗?

【问题讨论】:

  • 首先编写两个查询,根据您的规则使它们独一无二。然后加入这两个子表。使它们唯一的查询取决于数据库服务器的类型。请编辑问题并添加数据库服务器类型的标签。 MySQL? SQL 服务器?甲骨文? Postgres?

标签: sql


【解决方案1】:

你可以使用ROW_NUMBER():

SELECT a.IntId, a.EvId, a.Name, a.Phone1, b.Grp, b.Phone2
FROM TableA a LEFT OUTER JOIN
     (SELECT b.*,
             ROW_NUMBER() OVER (PARTITION BY ASId ORDER BY IntID DESC) as seqnum
      FROM TableB b
     ) b
    ON a.EvId = b.ASId AND b.seqnum = 1;

【讨论】:

  • 你好戈登,谢谢你的帮助!当我尝试在 sql server 中执行此操作时,它显示Invalid column name 'seqnum'。由于表 a 没有 seqnum,我想它是给它的。我的表在 sqlserver 中。另外,最后有一个where子句,但是当我输入where语句时,它说Incorrect syntax near the keyword 'where'你能帮我澄清一下吗?
  • 您好 Gordon,当我在 a.seqnum=1 之前删除 a 时,它可以工作但不会删除 tableA 上的重复项,它只会删除 tableb 上的重复项
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-08
  • 1970-01-01
  • 2020-12-28
  • 2021-12-10
  • 1970-01-01
相关资源
最近更新 更多