什么是mysql相关子查询

发布时间:2026/7/8 9:32:48

什么是mysql相关子查询 例SELECT*FROMcmf_fast_register rWHEREr.icp_status0ANDEXISTS(SELECT*FROMcmf_icp iWHERE(i.app_idr.app_id))一、结论里面包含子查询相关子查询整条 SQL 分为两部分外层主查询SELECT * FROM cmf_fast_register r WHERE ...内层EXISTS(...)括号里的一整段就是子查询-- 这一段就是子查询SELECT*FROMcmf_icpiWHERE(i.app_idr.app_id)二、什么是「相关子查询」它不是普通子查询是相关子查询子查询里用到了外层表的别名rr.app_id子查询不能独立执行必须依赖外层每一行的数据。执行逻辑拆解数据库先遍历外层cmf_fast_register每一条记录 r拿当前这条 r 的app_id丢进内层子查询去cmf_icp匹配有没有i.app_id 当前r.app_id的数据EXISTS 只判断「有没有匹配结果」有就保留这条 r没有就过滤掉再叠加条件r.icp_status 0双重筛选三、EXISTS 的特点对比 IN / JOIN只判断存在不返回数据你里面写SELECT *其实没用推荐改成SELECT 1性能更好逻辑不变EXISTS(SELECT1FROMcmf_icpiWHEREi.app_idr.app_id)不会产生重复行即使一条 r 对应几十条 icpEXISTS 只标记“存在”外层 r 只会输出一次完美解决你之前一对多 JOIN 重复数据的问题。匹配到第一条 icp 就立刻停止检索大数据量性能优于 INNER JOIN。四、整条 SQL 语义翻译查询所有满足两个条件的cmf_fast_register数据自身字段icp_status 0在cmf_icp表中存在同 app_id 的关联记录五、补充区分概念子查询写在()内部、嵌套在主查询里的查询语句相关子查询子查询引用了外层查询的表/字段普通子查询非相关不依赖外层可以单独执行例如WHERE app_id IN (SELECT app_id FROM cmf_icp)。

相关新闻