【问题标题】:MySQL Joins causing duplicatesMySQL 连接导致重复
【发布时间】:2013-09-13 18:19:12
【问题描述】:

我对某些 MySQL 连接为什么会做他们所做的事情的理解有点杂乱无章。

我有多个表,ALM_RECORDS 具有 ID,ALM_PHONES、ALM_ADDRESS 都有一个 RecordsID 列,该列与 ALM_RECORDS 的 ID 列相关。

基本上我需要根据这个 ID 从所有 3 个表中提取。以下是我的查询,但它不断返回三倍的重复条目。

SELECT a.ID, a.FIRST_NAME, a.LAST_NAME, 
       b.RecordID, b.PHONESID, b.PhoneType, b.NUM,        
       c.RecordID, c.address_block, c.city, c.state, c.post_code, c.country
FROM ALM_RECORDS a
    LEFT JOIN ALM_PHONES b
        ON a.ID = b.RecordID
    LEFT JOIN ALM_ADDRESS c
        ON a.ID = c.RecordID
WHERE a.ID = "123456"

结果应该是:

123456 - John - Smith - Business - 111.222.3333 - address etc..
123456 - John - Smith - Home     - 444.555.6666 - address etc..

但我得到的是:

123456 - John - Smith - Business - 111.222.3333 - address etc..
123456 - John - Smith - Business - 111.222.3333 - address etc..
123456 - John - Smith - Business - 111.222.3333 - address etc..
123456 - John - Smith - Home     - 444.555.6666 - address etc..
123456 - John - Smith - Home     - 444.555.6666 - address etc..
123456 - John - Smith - Home     - 444.555.6666 - address etc..

有人可以向我解释我在这里缺少什么吗?我应该使用其他类型的联接吗?

【问题讨论】:

  • 您在某处缺少连接。做一个select * 找出哪个表是罪魁祸首以及您需要进行什么联接。
  • 我认为你只需要一个GROUP BY b.NUM 就可以摆脱自己的欺骗
  • 使用 SELECT * 做同样的事情,只是显示更多的数据。我到底应该寻找什么?
  • Group By 想法可行,但这是解决此问题的“正确”方法吗?
  • GROUP BY 可能最好打开:a.ID, b.ID, c.ID。你仍然会有每人多条记录,但不会被骗。 (GROUP BY 对更复杂的查询至关重要)

标签: mysql left-join inner-join outer-join


【解决方案1】:
SELECT a.ID, a.FIRST_NAME, a.LAST_NAME, 
       b.RecordID, b.PHONESID, b.PhoneType, b.NUM,        
       c.RecordID, c.address_block, c.city, c.state, c.post_code, c.country
FROM ALM_RECORDS a
    LEFT JOIN ALM_PHONES b
        ON a.ID = b.RecordID
    LEFT JOIN ALM_ADDRESS c
        ON a.ID = c.RecordID
WHERE a.ID = "123456" GROUP BY b.NUM

【讨论】:

  • 刚刚意识到我只从应该接近 100,000 范围的 LOL 中得到 38 个结果。有什么想法吗?
  • 没关系,我是个白痴。 GROUP BY b.PhoneType 就是这样做的。 GROUP BY b.NUM 返回了一个巨大的结果。谢谢!
猜你喜欢
  • 2020-10-30
  • 2013-02-25
  • 1970-01-01
  • 2011-01-04
  • 2012-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多