【问题标题】:sql query giving repetitive resultssql查询给出重复的结果
【发布时间】:2020-04-05 10:20:40
【问题描述】:

我有两个表,我想从表中获取选定的列。 表 1 是 sfpinventoryinfo,表 2 是opticalportinfo 两者都有 NEID。

SELECT 
  sfpinventoryinfo.NEID, 
  sfpinventoryinfo.SlotNumber, 
  sfpinventoryinfo.PortNo, 
  sfpinventoryinfo.PortType,
  sfpinventoryinfo.`Type`, 
  sfpinventoryinfo.SN, 
  sfpinventoryinfo.GenDes,
  sfpinventoryinfo.ApplicationCode,
  opticalportinfo.ChannelFrequency
FROM
   sfpinventoryinfo 
   JOIN opticalportinfo ON sfpinventoryinfo.NEID = opticalportinfo.NEID;

但我得到了奇怪的结果

如上图所示,4 号插槽应该只有 1 个端口而不是 5 个条目

【问题讨论】:

  • 显示一些表格数据。
  • 请阅读此meta.stackoverflow.com/questions/333952/… 并编辑您的问题
  • 如果您想帮助自己,请在查询中添加 GROUP BY POrtNo 并查看是否对您有帮助,您可能需要向 GROUP BY 添加更多列并了解聚合函数。跨度>
  • 您在连接子句中的某处缺少一个字段。你能告诉我们来自那个查询的 SELECT * 吗?应该很容易发现..
  • 或者,如果您无法以任何其他方式消除重复项,则可以使用 SELECT DISTINCT。

标签: mysql sql join


【解决方案1】:

您的opticalportinfo 可能有六行,NEID 中的值为 13。因此,您的联接会在结果集中生成所有六行。

如果不了解您的应用程序的更多信息,很难猜测“正确”的方式来选择使用这六行中的哪一行。如果必须,您可以使用 SELECT DISTINCT 解决问题。但这是一个 hack。

【讨论】:

    【解决方案2】:

    您显然在一个或两个表中有重复项。在您的示例数据中,整行看起来是重复的,因此您可以使用 select distinct 这样整行就不会重复:

    SELECT DISTINCT i.NEID, i.SlotNumber, i.PortNo, i.PortType, i.`Type`, i.SN, 
           i.GenDes, i.ApplicationCode, oi.ChannelFrequency
    FROM sfpinventoryinfo i JOIN
         opticalportinfo op
         ON i.NEID = oi.NEID;
    

    或者GROUP BY:

    SELECT i.NEID, i.SlotNumber, i.PortNo, i.PortType, i.`Type`, i.SN, 
           i.GenDes, i.ApplicationCode, MAX(oi.ChannelFrequency)
    FROM sfpinventoryinfo i JOIN
         opticalportinfo op
         ON i.NEID = oi.NEID
    GROUP BY i.NEID, i.SlotNumber, i.PortNo, i.PortType, i.`Type`, i.SN, 
             i.GenDes, i.ApplicationCode;
    

    也就是说,确实需要了解为什么存在重复并调整您的查询或修复您的数据。

    【讨论】:

      猜你喜欢
      • 2020-08-28
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-19
      • 1970-01-01
      • 2017-06-06
      相关资源
      最近更新 更多