【问题标题】:How to avoid duplicate rows using joined tables with MySQL?如何使用 MySQL 连接表避免重复行?
【发布时间】:2021-02-26 22:36:27
【问题描述】:

我有这个查询,我得到了两次相同的行,但我只想得到一个具有不同值的行

SELECT * FROM comprobante C 
INNER JOIN emisor E
INNER JOIN conceptos CO 
ON C.id = E.idXML
AND C.id = CO.idXML
WHERE C.tipoComprobante = 'I' AND E.rfc = 'HECR610204JC7'
AND DATE_FORMAT(fecha, '%Y-%m-%d') BETWEEN '2020-01-01' AND '2020-12-31'

这个查询显示这个数据:

*************************** 1. row ***************************
              id: 3
           folio:
           serie:
           total: 12950.00
        subtotal: 12950.00
 lugarExpedicion: 60080
 tipoComprobante: I
          moneda: MXN
      metodoPago:
       formaPago:
           fecha: 2020-04-03 13:38:00
         version: 3.3
              id: 3
           idXML: 3
             rfc: HECR610204JC7
          nombre: RAMON EDUARDO HERNANDEZ CADENA
         regimen:
            pais:
          estado:
    codigoPostal: 0
       municipio:
       localidad:
         colonia:
       numeroExt:
       numeroInt:
           calle:
   regimenFiscal: 612
              id: 5
           idXML: 3
   claveProdServ: 85122000
noIdentificacion:
        cantidad: 70.00
     claveUnidad: E48
     descripcion: VALORACION MEDICA XX
   valorUnitario: 185.00
         importe: 12950.00
*************************** 2. row ***************************
              id: 3
           folio:
           serie:
           total: 12950.00
        subtotal: 12950.00
 lugarExpedicion: 60080
 tipoComprobante: I
          moneda: MXN
      metodoPago:
       formaPago:
           fecha: 2020-04-03 13:38:00
         version: 3.3
              id: 3
           idXML: 3
             rfc: HECR610204JC7
          nombre: RAMON EDUARDO HERNANDEZ CADENA
         regimen:
            pais:
          estado:
    codigoPostal: 0
       municipio:
       localidad:
         colonia:
       numeroExt:
       numeroInt:
           calle:
   regimenFiscal: 612
              id: 6
           idXML: 3
   claveProdServ: 85122000
noIdentificacion:
        cantidad: 70.00
     claveUnidad: E48
     descripcion: VALORACION MEDICA YY
   valorUnitario: 185.00
         importe: 12950.00

如您所见,数据相同,唯一不同的值在descripcion 我想在一行中的一列中获取这两个值,这可能吗?我需要做什么?

我有 3 张表,comprobante, emisor, conceptosconceptos 可能有很多属于comprobante 的记录,并且comprobante 是一对多的关系,希望你能帮助我,谢谢。

【问题讨论】:

标签: mysql inner-join


【解决方案1】:
SELECT C.id, GROUP_CONCAT(CO.descripcion)
FROM comprobante C 
INNER JOIN emisor E
ON
C.id = E.idXML
INNER JOIN conceptos CO 
ON 
C.id = CO.idXML
WHERE C.tipoComprobante = 'I' AND E.rfc = 'HECR610204JC7'
AND DATE_FORMAT(fecha, '%Y-%m-%d') BETWEEN '2020-01-01' AND '2020-12-31'
GROUP BY C.id

如果您通过其他字段添加选择和组,您应该会得到您需要的内容。 GROUP_CONCAT(CO.descripcion) 在对连接字符串进行分组时就像一个“总和”。 我移动了联接条件,第一个联接实际上是您版本中的笛卡尔积

【讨论】:

  • 感谢 @nbk 提供代码块,在移动设备上苦苦挣扎
猜你喜欢
  • 2013-06-30
  • 2016-05-17
  • 2013-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多