我有这些表格:
表___Billing
:
|----------|----------|----------|--------------|---------------------|
| BIL_Id | BIL_Item | BIL_Rate | BIL_Quantity | BIL_ApplicableTaxes |
|----------|----------|----------|--------------|---------------------|
| 1 | Hot-Dog | 4.50 | 2 | 3 |
| 2 | Tea | 3.25 | 3 | 3,4 |
|----------|----------|----------|--------------|---------------------|
BIL_Id
=此表中此项目的ID
BIL_Item
=项目的ID(指___SalesTaxes表)
BIL_Quantity
=客户使用的商品数量
BIL_ApplicableTaxes
=此商品的适用税金的ID。每个taxe id都以逗号分隔。
表___SalesTaxes
:
|----------|--------------|------------|
| STX_Id | STX_TaxeName | STX_Amount |
|----------|--------------|------------|
| 3 | Tax 1 | 3.50 |
| 4 | Tax 2 | 6.55 |
|----------|--------------|------------|
STX_Id
=此表中此项目的ID
STX_TaxeName
=纳税人的姓名
STX_Amount
=纳税人的百分比。
如何通过这两个表循环进入___Billing
表格以获得我需要应用的税率?
例如:
对于第一行,我应该:3.50
。
对于第二行,我应该:3.50, 6.55
。
希望问题很明确。
感谢。
答案 0 :(得分:2)
如果您正确地表达了自己的查询,则可以使用MySQL的FIND_IN_SET()
功能将税号再次与BIL_ApplicableTaxes
列中的CSV列表进行匹配:
SELECT t1.BIL_Id,
t1.BIL_Rate,
GROUP_CONCAT(COALESCE(t2.STX_Amount, 'NA')) AS tax_due
FROM ___Billing t1
LEFT JOIN ___SalesTaxes t2
ON FIND_IN_SET(t2.STX_Id, t1.BIL_ApplicableTaxes) > 0
GROUP BY t1.BIL_Id
但是,您应该认真考虑规范化___Billing
表并删除CSV数据。相反,每个税收条目都应该有自己的记录。
在这里演示: