如何通过JOIN查询获取在本地拥有账户的客户姓名与所在地
用JOIN实现目标查询的正确方法
嘿,我来帮你搞定这个问题!你要找的是在自己所在地拥有账户的客户,核心是要确认客户的账户所属的支行,正好在客户自己的居住地对吧?先说说你之前写的SQL哪里有问题:你直接把branch的place和customer的place关联,但没把账户和对应的支行绑定起来——这会导致系统把客户和所有同地点的支行都关联一遍,不管客户的账户是不是在那个支行,结果肯定不对。
正确的逻辑应该是三层关联+地点匹配:
- 先把客户表和账户表通过
cust_no关联,找到每个客户对应的所有账户 - 再把账户表和支行表通过支行编号(
account.branchno和branch.branch_no)关联,找到每个账户实际所属的支行 - 最后确保客户的所在地(
customer.place)和这个支行的所在地(branch.place)是同一个地方
给你两种可行的写法,效果是一样的,看你习惯哪种:
写法一:用WHERE过滤地点匹配的记录
SELECT c.CUST_NAME, c.PLACE FROM CUSTOMER c JOIN account a ON c.CUST_NO = a.CUST_NO JOIN branch b ON a.branchno = b.branch_no WHERE c.PLACE = b.PLACE;
写法二:把地点匹配放到JOIN的关联条件里
SELECT c.CUST_NAME, c.PLACE FROM CUSTOMER c JOIN account a ON c.CUST_NO = a.CUST_NO JOIN branch b ON a.branchno = b.branch_no AND c.PLACE = b.PLACE;
简单说下区别:写法一是先把所有关联的客户、账户、支行记录拉出来,再过滤出地点匹配的;写法二是在关联支行的时候就只挑和客户地点一致的,效率上差异不大,看你觉得哪种逻辑更清晰。
内容的提问来源于stack exchange,提问作者sreehari mani
相关产品推荐
相关产品推荐

