如何将下述SQL查询语句改写为标准INNER JOIN写法?
SQL隐式内连接转显式INNER JOIN改写结果
改写后的标准显式内连接语句如下,和原语句查询逻辑、返回结果完全一致:
SELECT person.person_last_name, person.birth_date, vip_acct_person.vip_ACCT_ID FROM person INNER JOIN vip_acct_person ON vip_acct_person.person_id = person.person_id WHERE person.birth_date < DATE_SUB(CURDATE(), INTERVAL 57 YEAR) ORDER BY person.birth_date;
改写要点说明
- 原SQL用逗号分隔多表、关联条件写在WHERE中的写法属于隐式内连接语法,和显式
INNER JOIN的执行效率、返回结果没有任何区别 - 改写核心逻辑:把FROM子句里的表间逗号替换为
INNER JOIN,将两表的关联匹配条件vip_acct_person.person_id = person.person_id从WHERE中拆分出来,放到ON子句后作为连接判定规则 - 原WHERE子句中仅保留针对数据的业务过滤条件,SELECT返回字段、ORDER BY排序规则均保持原样,没有做任何逻辑调整
- 推荐使用显式
INNER JOIN写法:关联逻辑和过滤逻辑拆分明确,多表关联场景下可读性更高,不容易漏写关联条件导致笛卡尔积错误
内容的提问来源于stack exchange,提问作者Madison
相关产品推荐
相关产品推荐

