简单使用就是
SELECT COUNT(1) FROM risk_black_list rb
WHERE
EXISTS(
SELECT
if(LEFT(mobile,1) = 0, SUBSTR(mobile ,2 ,LENGTH(mobile)) , mobile)
FROM risk_user_address_book_info r WHERE risk_case_id=7664
and if(LEFT(rb.mobile,1) = 0, SUBSTR(rb.mobile ,2 ,LENGTH(rb.mobile)) , rb.mobile) =
if(LEFT(r.mobile,1) = 0, SUBSTR(r.mobile ,2 ,LENGTH(r.mobile)) , r.mobile)
);
简单说就是rb表 与r 表有关联字段。并且 关联逻辑在子查询中,且子查询返回结果集可以与管理字段无关,即可实现。
其原理就是 EXISTS 会对外表rb进行循环查询匹配,它不在乎后面的内表子查询的返回值是什么,只在乎有没有存在返回值,存在返回值,则条件为真,该条数据匹配成功,加入查询结果集中;如果没有返回值,条件为假,丢弃该条数据。
子查询可以使用索引,但外查询要全表扫描