|
说明:代码用于ACCESS数据库,实际应用中《用户表》数据有近二十万行,《地址表》数据有近五万行。我自己写的SQL语句能实现预期目的,但实在是太慢了,慢到受不了的地步。跪求大神帮优化一下SQL查询代码:
《用户表》结构及几个示例数据:
用户号码 | 用户地址 | 13543211234 | 重庆市万州区太白路129号1单元7-2 | 13543211235 | 重庆市万州区太白路129号附3号2单元5-2 | 13543211236 | 万州区太白路95号4栋9-5 | 13543211237 | 重庆市万州区白岩路135号附4号10-2 |
《地址表》结构及几个示例数据:
地址前缀 | 小区规范化命名 | 重庆市万州区太白路129号 | 太白路129号 | 万州区太白路95号 | 太白路95号 | 重庆市万州区白岩路147号 | 白岩路147号 |
需求1:示例数据《用户表》中13543211237对应的地址前半部分“重庆市万州区白岩路135号”在《地址表》中不存在,需查询出来后手工处理。
我的代码(求优化):
SELECT 用户表.用户地址 FROM 用户表 LEFT JOIN 地址表 ON 用户表.用户地址 like 地址表.地址前缀+'*' WHERE 地址表.地址前缀 is null;
需求2:示例数据《用户表》中前三个号码对应的地址前半部分均已收录在《地址表》中。需要查询提取用户号码及小区规范化命名:
我的代码(求优化):
SELECT 用户表.用户号码, 地址表.小区规范化命名 FROM 用户表 LEFT JOIN 地址表 ON 用户表.用户地址 like 地址表.地址前缀+'*' WHERE 地址表.地址前缀 is not null;
个人感觉影响效率最大的问题是like语句,还加上了不确定字符数的通配符。但除此之外一直想不到其他方法。跪求指导啊。
|
|