【问题标题】:Output joining two tables in a certain format [closed]输出以某种格式连接两个表[关闭]
【发布时间】:2020-04-30 20:40:57
【问题描述】:

问题是编写一个连接这两个表的 SQL 查询:

T1

第 X 列

  • 一个
  • 一个
  • 一个
  • B
  • B

T2

Y 列

  • 一个
  • 一个
  • B

将这两个表连接起来得到这种格式的结果:

第 1 列第 2 列

  • 阿阿
  • 阿阿
  • 空值
  • 乙乙
  • B 空

如果我做左连接,我会得到额外的行,如果我做不同的,我会得到更少的行,因为它会消除重复。

请指导我如何处理这个问题。

【问题讨论】:

  • T1 & T2 中是否有任何列(X/Y 除外)?
  • “请指导我”不是有效的 SO 问题。

标签: mysql sql join left-join


【解决方案1】:

一种选择是使用row_number() 对两个表中的记录进行排名,然后使用该信息连接表:

select t1.x, t2.y
from (select x, row_number() over(partition by x order by x) rn from t1) t1
left join (select y, row_number() over(partition by y order by y) rn from t2) t2 
    on t2.y = t1.x and t2.rn = t1.rn

注意:窗口函数row_number() 仅在 MySQL 8.0 中可用。

【讨论】:

  • 这看起来不错。非常感谢。
  • @RJ07 注意,这个查询的结果不保证是一致的。如果您要显示其他列,或者您将哪些 A 或 B 记录并排显示很重要,这可能会对您产生影响。这仍然是最好的方法......如果可以的话,您只想在order by 中更具体。
猜你喜欢
  • 2020-04-10
  • 1970-01-01
  • 2019-03-23
  • 1970-01-01
  • 2020-12-29
  • 1970-01-01
  • 2019-01-26
  • 2021-10-12
  • 1970-01-01
相关资源
最近更新 更多