【问题标题】:SQL Query Returning Duplicate Results返回重复结果的 SQL 查询
【发布时间】:2011-01-19 22:45:35
【问题描述】:

我已经研究这个查询有一段时间了,我以为我在我想要的地方找到了它,但显然没有。

数据库中有两条记录(订单)。该查询应该返回两个不同的行,而是返回两个具有完全相同值的行。我认为这可能与我正在使用的 GROUP BY 或派生表有关,但我的眼睛很累,看不到问题。你们中的任何人都可以帮忙吗?提前致谢。

SELECT orders.billerID, 
    orders.invoiceDate, 
    orders.txnID, 
    orders.bName, 
    orders.bStreet1, 
    orders.bStreet2, 
    orders.bCity, 
    orders.bState, 
    orders.bZip, 
    orders.bCountry, 
    orders.sName, 
    orders.sStreet1, 
    orders.sStreet2, 
    orders.sCity, 
    orders.sState, 
    orders.sZip, 
    orders.sCountry, 
    orders.paymentType, 
    orders.invoiceNotes, 
    orders.pFee, 
    orders.shipping, 
    orders.tax, 
    orders.reasonCode, 
    orders.txnType, 
    orders.customerID, 
    customers.firstName AS firstName, 
    customers.lastName AS lastName, 
    customers.businessName AS businessName, 
    orderStatus.statusName AS orderStatus, 
    IFNULL(orderItems.itemTotal, 0.00) + orders.shipping + orders.tax AS orderTotal, 
    IFNULL(orderItems.itemTotal, 0.00) + orders.shipping + orders.tax - IFNULL(payments.totalPayments, 0.00) AS orderBalance 
FROM orders 
LEFT JOIN customers ON orders.customerID = customers.id 
LEFT JOIN orderStatus ON orders.orderStatus = orderStatus.id
LEFT JOIN 
    ( 
      SELECT orderItems.orderID, SUM(orderItems.itemPrice * orderItems.itemQuantity) as itemTotal
      FROM orderItems
      GROUP BY orderItems.orderID
    ) orderItems ON orderItems.orderID = orders.id 
LEFT JOIN 
    ( 
      SELECT payments.orderID, SUM(payments.amount) as totalPayments
      FROM payments
      GROUP BY payments.orderID
    ) payments ON payments.orderID = orders.id

【问题讨论】:

  • 我认为我不熟悉 IFNULL 关键字。如果这不是拼写错误(ISNULL?),那么您应该使用正确的平台进行标记。
  • 尝试一一删除连接,直到获得您期望的单行。最后一个被删除的是罪魁祸首。
  • IFNULL 是 MySQL 中的 ISNULL 等价物

标签: sql mysql duplicates


【解决方案1】:

通常,当您加入许多表并最终出现重复行时,这是因为您没有看到整个画面。如果您要执行“选择 *”以查看查询中包含的所有列(而不是返回列的子集)并比较结果行,您会发现沿途某处有一列包含不同的数据.

【讨论】:

    【解决方案2】:

    当我遇到这个问题时,我开始一次注释掉一个连接(以及相关的选定列),直到找到导致问题的有问题的连接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-03
      • 1970-01-01
      • 2016-07-12
      相关资源
      最近更新 更多