【发布时间】:2019-11-26 23:07:38
【问题描述】:
我无法弄清楚我的 MySQL 语句的问题出在哪里。我有一张 Estimates 表和一张 Invoices 表。每个估算可以有多个发票(例如,估算的存款,然后是余额)。我正在尝试从 Estimates 中选择所有 Estimates,并将发票总数与每个相应的 Estimate 相加。当我运行此查询时,最终结果中不包含没有相应发票的 Estimates。我虽然 LEFT JOIN 会选择所有这些,但似乎没有选择没有相应发票的 Estimates。任何帮助将不胜感激!
SELECT p.EstimateID, p.ClientName, p.EstimateTitle, p.EstimateTotalWithTax, SUM(c.InvoiceTotalWithTax)
FROM Estimates p LEFT JOIN
Invoices c ON p.EstimateID = c.EstimateID
WHERE p.EstStatusDateAndTime BETWEEN '2019-1-1 00:00:00' AND '2019-12-31 23:59:59'
AND (p.EstStatus = 3)
AND p.EstimateActive = 'Active'
AND (p.Template !='Yes' OR p.Template IS NULL)
AND c.InvoiceDate BETWEEN '2019-1-1 00:00:00' AND '2019-12-31 23:59:59'
AND (c.InvoiceStatus = '1' OR c.InvoiceStatus = '2')
AND (c.InvoiceActive != 0 OR c.InvoiceActive IS NULL)
GROUP BY p.EstimateID
【问题讨论】:
-
通过在
WHERE子句中使用left 表的字段,您可以有效地将LEFT JOIN转换为INNER JOIN。您需要记住,在 SQL 中NULL不等于任何值,包括另一个NULL。