替代查询

时间:2014-06-19 07:29:13

标签: sql oracle11g

是否有其他方法可以编写此查询?

select 
* 
from 
(select 
   countries.country_name, sum( profits.amount_sold) 
from 
   PROFITS 
full outer join 
   CUSTOMERS on PROFITS.CUST_ID = CUSTOMERS.CUST_ID 
full outer join 
   COUNTRIES on CUSTOMERS.COUNTRY_ID = COUNTRIES.COUNTRY_ID 
WHERE 
   COUNTRY_NAME = 'Japan'   
group by 
   countries.country_name )

提前致谢

2 个答案:

答案 0 :(得分:1)

查看当前查询,看起来外部选择是不必要的。此外,由于您在行上聚合,因此您不需要完全外连接。如果您想要稍微不同的方式来简化查询,您应该能够使用:

select countries.country_name, sum(profits.amount_sold)
from profits, customers, countries
where profits.cust_id = customers.cust_id
and customers.country_id = countries.country_id
and countries.country_name = 'Japan'
group by countries.country_name;

最后,由于您的查询会过滤到一行(country_name ='日本'),如果您确定自己拥有该组,则您甚至不需要该组。至少一行:

select 'Japan' as country_name, sum(profits.amount_sold)
from profits, customers, countries
where profits.cust_id = customers.cust_id
and customers.country_id = countries.country_id
and countries.country_name = 'Japan';

答案 1 :(得分:0)

您还没有提供任何目标,例如更快,更容易阅读,更容易修改其他功能。我会假设你想要速度。

首先,您可以将国家/地区的联接更改为左联接。最后你可以删除它所在的巢,因为它似乎也没有用于我们的目的。