2012-04-23 63 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 

在查詢結束