MySQL Sakila数据库多JOIN查询员工与门店同城市匹配问题
原查询问题分析
你写的查询存在两个核心逻辑缺陷:
- 末尾
JOIN store没有指定关联条件,实际生成了员工表与门店表的笛卡尔积,仅因当前Sakila库中门店只有2条记录才碰巧输出看似正确的结果,数据量扩张后结果会完全不符合要求。 - 没有关联门店的地址信息,也未校验员工家庭地址与门店地址是否属于同一城市,完全不满足需求的校验逻辑。
正确查询实现
按照需求要求的4次JOIN逻辑,完整关联所有需要校验的表即可,代码如下:
USE sakila; SELECT s.first_name, s.last_name, c.city FROM staff s -- 关联员工家庭地址 JOIN address a_staff ON s.address_id = a_staff.address_id -- 关联城市表获取员工家庭所在城市名 JOIN city c ON a_staff.city_id = c.city_id -- 关联员工所属门店 JOIN store st ON s.store_id = st.store_id -- 关联门店对应的地址 JOIN address a_store ON st.address_id = a_store.address_id -- 校验家庭地址与门店地址属于同一城市 WHERE a_staff.city_id = a_store.city_id;
执行后会返回2条符合要求的员工记录,和预期结果一致。
内容的提问来源于stack exchange,提问作者Jov
相关产品推荐
相关产品推荐

