with t as ( select a.* from 医保住院结算明细 a left join 医保住院结算明细 b on a.个人编码 =b.个人编码 where a.医保项目名称 like '%心脏彩色多普勒超声%' and (b.医保项目名称 like '%左心功能测定%' or b.医保项目名称 like '%左心功能测定彩色多普勒超声检查%') union all select b.* from 医保住院结算明细 a left join 医保住院结算明细 b on a.个人编码 =b.个人编码 where a.医保项目名称 like '%心脏彩色多普勒超声%' and (b.医保项目名称 like '%左心功能测定%' or b.医保项目名称 like '%左心功能测定彩色多普勒超声检查%') ) select distinct * from t 优化一下
时间: 2024-04-15 09:29:40 浏览: 66
select distinct用法
优化查询语句可以考虑以下几个方面:
1. 使用内连接替代左连接:将左连接改为内连接可以减少查询的数据量,提高查询效率。
2. 使用索引:对医保项目名称和个人编码字段创建索引,可以加快查询速度。
3. 优化模糊匹配:模糊匹配的操作比较耗时,可以考虑使用全文搜索引擎或者将模糊匹配的条件放在临时表中进行过滤。
以下是优化后的查询语句示例:
```sql
with t as (
select a.* from 医保住院结算明细 a
inner join 医保住院结算明细 b on a.个人编码 = b.个人编码
where a.医保项目名称 like '%心脏彩色多普勒超声%'
and (b.医保项目名称 like '%左心功能测定%' or b.医保项目名称 like '%左心功能测定彩色多普勒超声检查%')
)
select distinct * from t;
```
请注意,以上只是一个示例,具体优化方法还需要根据实际情况进行调整。另外,由于我是一个AI助手,无法直接执行代码,所以请在实际环境中测试和执行优化后的查询语句。
阅读全文