假设您从 Web 服务器到 DBA 服务器的连接速度极慢,并且您需要执行一系列的三个查询来处理单个 Web 请求。有没有办法将查询合并为一个?假设以下场景
person.id person.name
1 James
2 Stacy
.
country.id country.name
1 USA
2 UK
.
location.person_id location.country_id
1 1
1 2
Web 表单将发布两个变量,即 name="James"country="China"并且您要执行以下操作
- “James”是否存在,如果不存在,则插入james
- “中国”是否存在,如果不存在,插入china
- “James”是否住在“中国”,如果不是则插入关系
比如
select person.id, country.id, location.person_id
from person, country, location
where
person.name="James" and
country.name="China" and
person.id=location.id and country.id=location.country_id
上面的查询没有用,因为如果人、国家或位置不存在,它将不会返回任何记录。
我知道可以使用存储过程来执行此操作,但并非所有数据库都支持存储过程。
请您参考如下方法:
解决方法很简单
SELECT (SELECT person.id from person WHERE person.name = 'James') as Name,
(SELECT country.id from country WHERE country.name="China") as Country,
(SELECT location.person_id from location WHERE person.id = location.id and country.id = location.country_id and person.name = 'James' and country.name="China") as Location