2012-04-23 6 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を持っていない原因、理由を知りません!

おかげでORDER BY句については

+0

あなたはどのようなDBMSを使用していますか? (mssql、mysql oracel)? – Arion

+0

S_nameとC_nameを一緒に1つの列に出力する場合は、実際に短縮することはできません。結果が重複排除されないように 'UNION ALL'を使うことを考えてください。末尾に' ORDER BY name'を付けた 'S_name AS name'' 'C_name as name'に別名を追加してください。 –

答えて

2

の終わりに

ORDER BY 1 

を試してみてくださいそれから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'はうまく動作します。 –

+0

真実、私はそれを削除しました。 – Taryn

1

、あなたは同じ列内のすべてのデータが必要な場合は、あなたの周りSELECTを置くことができ、あなたのクエリ

関連する問題