2012-04-23 59 views
3

我可以写这个声明更短吗?这个声明更短/订单

Select S_name 
from 
    Supplier 
    JOIN Nation ON Supplier.S_nationkey = Nation.N_nationkey 
    JOIN Region on Nation.n_regionkey = region.R_regionkey 
Where 
    Region.r_name = 'AFRICA' 
Union 
Select C_name 
from 
    Customer 
    JOIN Nation ON Customer.C_Nationkey = Nation.N_nationkey 
    JOIN Region on Nation.N_regionkey = Region.R_regionkey 
Where 
    Region.R_name = 'AFRICA' 

,我想按名称排序我的输出,但我不知道为什么,因为我确实有C_name和S_NAME作为输出?

感谢

+0

什么DBMS您使用的? (mssql,mysql oracel)? – Arion 2012-04-23 13:50:11

+0

如果您希望将S_name和C_name一起输出到一个列中,则无法真正缩短它。考虑使用'UNION ALL',以便结果不被重复数据删除,然后在末尾添加别名'S_name AS name''C_name as name''ORDER BY name' – 2012-04-23 13:50:18

回答

2

如果你想在同一列中的所有数据,那么你可以把一个SELECT各地它然后做一个ORDER BY

Select S_name As Names 
    from Supplier 
    JOIN Nation 
     ON Supplier.S_nationkey = Nation.N_nationkey 
    JOIN Region 
     on Nation.n_regionkey = region.R_regionkey 
    Where Region.r_name = 'AFRICA' 
    Union 
    Select C_name As Names 
    from Customer 
    JOIN Nation 
     ON Customer.C_Nationkey = Nation.N_nationkey 
    JOIN Region 
     on Nation.N_regionkey = Region.R_regionkey 
    Where Region.R_name = 'AFRICA' 
    ORDER BY Names 

如果您不需要在同一列中的数据,那么你可以这样做:

Select S_name, c.C_name 
from Supplier 
JOIN Nation 
    ON Supplier.S_nationkey = Nation.N_nationkey 
JOIN Region 
    on Nation.n_regionkey = region.R_regionkey 
JOIN Customer c 
    on Nation.N_nationkey = c.C_Nationkey 
Where Region.r_name = 'AFRICA' 
ORDER BY S_name, c.c_name 
+1

您并不需要外部' SELECT'或括号。 'SELECT ... UNION SELECT ... ORDER BY Names'会工作得很好。 – 2012-04-23 14:04:03

+0

是真的,我删除它。 – Taryn 2012-04-23 14:07:03

1

对于ORDER BY子句,尝试

ORDER BY 1 

在查询结束