2011-06-22 2 views
3

私は従業員の名字を取得しているUSERSテーブルを持っていて、それを1つの名前として印刷しています。このデータでORDER BYを正しく使用するにはどうすればよいですか?ここでORDER BYはOracleの連結名ですか?

は私が持っているものです。

SELECT l.OFFICE_NAME, (us.LAST_NAME || ' , ' || us.FIRST_NAME) AS "Employee Name" 
FROM LOCAL_OFFICE l, USERS us 
WHERE l.LOCAL_OFFICE_ID = us.LOCAL_OFFICE_ID 
ORDER BY l.OFFICE_NAME --what do I place here?-- 

私はFROMより高価なのではなく、JOINを介してこれを行いますが、どのように私は名前のアルファベット順注文するのですか?

+1

FROMはJOINよりも「高価」ではありません。 JOINは、特に大規模なSQL文では、読みやすくするために最近好評です。 –

+0

@トニーAndrewsああ。私はこれを自分自身に教えているところで、FROMは本質的に2つのテーブルのデカルト積であると私は信じられないほど高価なことがあると知っています。 – null

+1

いいえ、WHERE句に結合条件を指定しないと、デカルト積はありません。 –

答えて

8

あなたが言うことができます:11Gで動作しますが、そうでないかもしれない旧バージョンのOracleで

ORDER BY office_name, "Employee Name" 

を。

+0

これを試しましたが、エラーが表示されます。[エラー]実行(11:10):ORA-00904: "Employee Name":無効な識別子 – null

+1

ああ、11Gで動作します。 –

+0

ああ、私はそれを引き起こしていたどこかのエラーを見つけました。ありがとう! – null

6
ORDER BY l.OFFICE_NAME, (us.LAST_NAME || ' , ' || us.FIRST_NAME) 
4

あなたの連結は、本当に新しいものを追加していないと、なぜだけでなく

ORDER BY l.OFFICE_NAME, us.LAST_NAME, us.FIRST_NAME 

編集:USERS.LAST_NAMEおよび/またはUSERS.FIRST_NAMEに索引がある場合、これは、連結で注文するよりも高速になりますその結果を使用でき

+0

これはうまくいきませんでした。なぜなら私はconcat ASの "Employee Name"を参照しているからです。 – null

+0

このように多くのことがあります。価値のある指標を作るチャンスを与えます。 – Alfabravo

4

:1,2

BY

ORDER

これは素晴らしい方法ではありませんが、うまくいきます。