MySQL 根据另一个 table 信息拆分 table 金额

MySQL split table amounts based on another table information

我需要根据另一个相关的 table 信息 (bill_details) 拆分 table(交易)中的金额。

基础table(交易):

ID amount document_id
1 100.00 11
2 80.00 12
3 120.00 13

另一个table (bill_details):

ID amount document_id description
1 20.00 11 A
2 60.00 11 B
3 20.00 11 C
4 80.00 12 D
5 60.00 13 E
6 20.00 13 F
5 20.00 13 G
6 40.00 13 H

我需要的:

amount (splited from transactions) description (from row in description)
20.00 A
60.00 B
20.00 C
80.00 D
60.00 E
20.00 F
20.00 G
20.00 H

注意事项:有时'bill_details'金额之和不等于'transactions'金额。 一张账单可以有0+笔交易。

我应该在 MySQL 中继续尝试还是应该使用 PHP?

有点复杂,但在 MySQL 8.0 中,您可以使用 window 函数的下一种方式:

SELECT 
    description,
    bill_details.amount + least(
        transactions.amount -
        SUM(bill_details.amount) OVER (PARTITION BY document_id ORDER BY bill_details.ID),
        0
    ) amount
    
FROM bill_details
JOIN transactions USING(document_id)
ORDER BY bill_details.ID

Live SQL fiddle