SQLITE:无法解释的行为 - 比较适用于某些数字,而不适用于其他数字

时间:2012-12-13 18:23:18

标签: sql sqlite subquery

我有一个返回正确结果的查询,除了一些值...不知道为什么。 我正在使用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 时,我会得到与该金额相匹配的所有结果。

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

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

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

SQL Fiddle demo (with and without round)