【问题标题】:Is is possible to join 2 tables if one of them has duplicate values in the column that's joining?如果其中一个表在加入的列中有重复值,是否可以加入 2 个表?
【发布时间】:2012-02-22 13:05:41
【问题描述】:

假设我将Shoes 表加入Clothes 表,它们都有一个名为ShoesID 的列,所以对我来说,在ShoesID 上加入这两个表是有意义的(它也恰好是Shoes 表的主键)。但这是我的问题,它不是Clothes 表的主键,所以在Clothes 表中,在ShoesID 列中,一些行会重复,这会破坏我的连接。

有没有办法解决这个问题?

衣服桌 衣服ID鞋ID NakedVarchar 99 |1 |电子| 100 |1 | f| 101 |4 |克| 102 |4 | d| 我想加入这个: 鞋桌 鞋子ID 说明varchar |1 |一个| |2 |乙| |3 | c| |4 | d|

所以我认为这样做的合乎逻辑的方法是这样做

LEFT JOIN Clothes ON Shoes.ShoesID = Clothes.ShoesID

不幸的是,由于 Clothes 表包含重复项,因此 Postgres 似乎将它们删除了, 我想加入所有数据,包括重复数据,我该如何解决这个问题?

这不像逆转我的加入声明那么简单,因为我在技术上试图将它们加入一个大 有许多其他联接的查询。

【问题讨论】:

  • 除了ShoesID之外,您还使用什么标准来确定将 Clothes 表的哪一行关联到 Shoes 表的给定行?
  • 不确定 Postgre 是否支持它(我希望它支持),但在 SQL Server 中,您可以加入一个消除欺骗的子查询。
  • 好吧,Postgres 确实消除了欺骗,这部分是我的问题,我希望正确连接表格并将欺骗包含在连接中,我必须使用 ShoesID 作为标准看起来。
  • @user519753 为什么这是个问题?如果Clothes 表中有多个具有相同ShoeID 的条目,则连接应该返回重复的行。如果您有获得单行的条件,您可以引入其他条件。
  • 也许您应该包括一些示例数据、您的 SQL、您看到的结果以及您期望的结果。

标签: sql postgresql join


【解决方案1】:

您可以进行任何您想要的连接,甚至是“自连接”,但如果关键字之间没有重合或匹配,则您的查询可能为空。如果你想把它们都列出来,你应该使用 UNION 而不是 join。

【讨论】:

    猜你喜欢
    • 2021-10-14
    • 2020-05-23
    • 1970-01-01
    • 1970-01-01
    • 2019-01-06
    • 2021-05-30
    • 2013-10-03
    • 2015-03-09
    • 2019-09-11
    相关资源
    最近更新 更多