【发布时间】: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