3

我有一个返回正确结果的查询,除了一些值......不知道为什么。我正在使用 Chinook 数据库。

SELECT SUM(unitPrice)
FROM invoiceLine
WHERE invoiceId = 5

这将返回 13,86。

SELECT invoiceId, total
FROM invoice 
WHERE invoiceId = 5

这也返回 13,86。现在考虑下一个查询:

SELECT invoiceId, total
FROM invoice
WHERE total = (SELECT SUM(unitPrice)
            FROM invoiceLine
            WHERE invoiceId = 5)

这返回......什么都没有!当我更改为invoiceId = 1时,我确实得到了与该金额匹配的所有结果。

为什么??(我知道最后一个查询没有多大意义,它只是为了清楚地展示问题。

4

2 回答 2

2

如果您的发票总额对 2dp 是正确的,您也可以使用

SELECT invoiceId, total
FROM invoice
WHERE total = (SELECT Round(SUM(unitPrice),2)
            FROM invoiceLine
            WHERE invoiceId = 5)

SQL Fiddle 演示(带和不带轮)

于 2012-12-13T18:54:19.227 回答
2

欢迎来到浮点运算的世界,所见即所得。

尝试类似:

SELECT invoiceId, total
FROM invoice i cross join
      (SELECT SUM(unitPrice) as total
            FROM invoiceLine
            WHERE invoiceId = 5
      ) i5
WHERE abs(i.total - i5.total) < 0.001
于 2012-12-13T18:28:04.683 回答