【发布时间】:2015-10-17 09:32:29
【问题描述】:
我有以下表格:
答:
+----+-----------+-------+----------+
| ID | PaymentID | Price | Quantity |
+----+-----------+-------+----------+
| 1 | 1 | 128 | 1 |
| 2 | 2 | 10 | 2 |
| 3 | 2 | 11 | 1 |
| 4 | 3 | 100 | 2 |
+----+-----------+-------+----------+
乙:
+-----------+------------+
| PaymentID | TotalPrice |
+-----------+------------+
| 1 | 128 |
| 2 | 31 |
| 3 | 201 |
+-----------+------------+
并查询:
SELECT a.ID
FROM a
LEFT JOIN b ON b.PaymentID = a.PaymentID
WHERE b.TotalPrice = (a.Price * a.Quantity)
当 a.PaymentID 是唯一的,但表 A 中的一些交易被分开并一起支付(表 B)时,它可以正常工作。上面的查询返回 a.ID = 1 但我需要返回 a.ID = 1,2,3。
a.PaymentID(1): 128 * 1 = 128 MATCH
a.PaymentID(2): 10 * 2 + 11 * 1 = 31 MATCH
a.PaymentID(3): 100 * 2 = 200 NOT MATCH
【问题讨论】:
-
为什么你
need to return a.ID = 1,2,3.你的预期输出是什么? -
为什么你期望 ID =3?这里的总价格不等于价格 * 数量?
-
为什么需要表B?你需要保持它是正确的。您可以通过简单的 SQL 检索它。 SELECT PaymentID, sum(Price*Quantity) FROM A WHERE PaymentID = 2 GROUP BY PaymentID
-
表 A 中的交易从表 B 中分离出来 (PaymentID = 2) => 10*2 + 11*1 = 31。表 A 是交易列表,表 B 是从银行帐户生成的,我需要返回与收到的付款匹配的交易。
-
顺便提一下,这将呈现为 INNER JOIN。