我有一个返回正确结果的查询,除了一些值...不知道为什么。 我正在使用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 时,我会得到与该金额相匹配的所有结果。
为什么? (我知道最后一个查询没有多大意义,只是为了清楚地证明这个问题。
答案 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)