如何通过单条SQL查询按规则为支付记录分配分类外键
可以用单条SQL实现需求
你可以通过关联规则表并结合条件匹配,用单条SQL直接得到带分类ID的支付记录。以下是实现代码:
SELECT p.id, p.title, p.recipient, p.amount, COALESCE( (SELECT arc.category_id FROM assign_rule_category arc JOIN assign_rule ar ON arc.assign_rule_id = ar.id WHERE (ar.description = 'TITLE_CONTAINS' AND p.title LIKE CONCAT('%', arc.value, '%')) OR (ar.description = 'RECIPIENT_CONTAINS' AND p.recipient LIKE CONCAT('%', arc.value, '%')) LIMIT 1), p.category_id ) AS category_id FROM payment p;
逻辑说明:
- 规则匹配:通过
JOIN关联assign_rule_category和assign_rule,根据规则类型(TITLE_CONTAINS或RECIPIENT_CONTAINS),用LIKE模糊匹配支付记录的title或recipient字段 - 优先级处理:用
COALESCE函数优先使用规则匹配到的分类ID,若没有匹配规则,则保留原payment表中的category_id(兼容后续手动设置分类的场景) - 去重处理:
LIMIT 1保证如果某条支付记录匹配多个规则,只会返回第一个匹配的分类ID,避免结果混乱
执行这条SQL后,就能得到你期望的包含对应分类ID的支付记录列表。
内容的提问来源于stack exchange,提问作者dafie
相关产品推荐
相关产品推荐

