如何基于LOAN和BEHAVIOR表查询unpaid_number≥1的CUSTOMER数据?
解决方案:查询关联逾期行为的客户记录
没问题,我来帮你搞定这个SQL查询需求!根据你给出的三张表结构,我们可以通过两种常见的方式实现需求:
方法一:使用INNER JOIN关联三张表
这种方法直观易懂,通过表之间的关联键把三张表连接起来,再筛选出符合条件的记录,最后去重避免同一个客户被多次返回:
SELECT DISTINCT c.* FROM CUSTOMER c INNER JOIN LOAN l ON c.customer_id = l.customer_id INNER JOIN BEHAVIOR b ON l.behavior_id = b.behavior_id WHERE b.unpaid_number >= 1;
逻辑说明:
INNER JOIN LOAN:把客户表和贷款表通过customer_id关联,只保留有贷款记录的客户INNER JOIN BEHAVIOR:把贷款表和行为表通过behavior_id关联,只保留有对应行为记录的贷款WHERE b.unpaid_number >= 1:筛选出逾期次数≥1的行为记录DISTINCT c.*:确保每个客户只返回一条记录(因为一个客户可能有多笔贷款对应逾期行为)
方法二:使用EXISTS子查询(推荐大数据量场景)
如果你的表数据量比较大,这种方法通常效率更高,因为EXISTS只要找到匹配的记录就会停止查询,不需要全表连接:
SELECT * FROM CUSTOMER c WHERE EXISTS ( SELECT 1 FROM LOAN l JOIN BEHAVIOR b ON l.behavior_id = b.behavior_id WHERE l.customer_id = c.customer_id AND b.unpaid_number >= 1 );
逻辑说明:
- 外层查询遍历每个客户记录
- 子查询检查当前客户是否存在至少一笔贷款,关联着
unpaid_number≥1的行为记录 - 只要子查询返回结果,就保留该客户记录,天然不会出现重复的客户数据
内容的提问来源于stack exchange,提问作者chihabeddineAourinmouche
相关产品推荐
相关产品推荐

