sql - SQL 查询耗时太长,甚至没有响应
问题描述
SQL> desc airport
Name Null? Type
----------------------------------------- -------- ----------------------------
AIRPORT_ID NOT NULL NUMBER(5)
CITY_ID NOT NULL NUMBER(5)
AIRPORT VARCHAR2(59)
IATA_CODE VARCHAR2(3)
SQL> desc city
Name Null? Type
----------------------------------------- -------- ----------------------------
CITY_ID NOT NULL NUMBER(5)
COUNTRY_ID NOT NULL NUMBER(5)
CITY VARCHAR2(36)
SQL> desc country
Name Null? Type
----------------------------------------- -------- ----------------------------
COUNTRY_ID NOT NULL NUMBER(5)
COUNTRY VARCHAR2(36)
这是查询:
select airport_id, airport, iata_code, city, country
from airport a, city b, country c
where a.city_id = b.city_id
and b.country_id = c.country_id
and b.city like '%tehran%' or iata_code like '%tehran%'
order by airport asc;
当我使用一个参数运行相同的查询时,此查询没有响应或几分钟响应,例如and b.city like '%tehran%'
通过删除or iata_code like '%tehran%'
然后它运行良好并且结果不到一秒
为什么它没有响应两个参数,例如and b.city like '%tehran%' or iata_code like '%tehran%'
解决方案
看起来你想要
select airport_id, airport, iata_code, city, country
from airport a
join city b on a.city_id=b.city_id and (b.city like '%tehran%' or b.iata_code like '%tehran%')
join country c on b.country_id=c.country_id
order by airport asc;
注意 SQL 标准 JOIN 语法和使用括号固定的逻辑 AND/OR 操作的顺序。
推荐阅读
- html - 轮播指示器不起作用。我不知道为什么
- r - 如何计算 r 中李克特型响应的累积比例?
- javascript - 简洁地从另一个属性与搜索匹配的对象数组中获取一个对象属性
- python - 在 Python 中获取一个月开始和结束的 unix 时间戳
- c# - 如何在剃须刀页面中退出循环遍历模型项的foreach?
- java - Java EE CDI 部署异常 - WELD-001408:具有限定符 @Default 的类型 EntityManager 的依赖关系不满足
- reactjs - 如何修复“表单”被赋值但从未在 axios 中使用
- nginx - 如何修复:使用 nginx 反向代理时收到错误代码 2 的 RST_STREAM
- python - 如何在 MacOS 的 jupyter notebook 中显示所有可能的方法?
- css - 服务器端渲染时加载时图像拉伸到 100%