2016-07-13 4 views
0

を照会し、私はいくつかの他のIDと一緒に、列employeeidpartnoで、二つのテーブル、employee(いくつかの他の列と一緒に文字列id付き)とordersを持っていると言います。効率が

select * 
from employees, orders 
where id = employeeid 
    and id = '22222' 

または

select * 
from employees, orders 
where id = '22222' 
    and employeeid = '22222' 

を言って、より効率的ですかそれは本当に問題ではありませんか?

+0

OracleのQuery Optimizerは、このような問題を処理するのに十分な洗練されたものです。だから、あなたと他の人にとって明らかなように書く。 –

+1

'where'句の古い、古い、壊れやすい暗黙的な結合の代わりに、明示的な' JOIN'演算子を使い始めるべきです。 –

+0

"Oracle transitive closure"を検索する –

答えて

0

ジョインをしようとしているように見えます。その場合、2番目のフォームが期待どおりに機能しない場合は、エラーが発生します。最初は、この度有資格のようになります。最初の等式は本当にemployeesテーブルから特定の行に参加するためにordersテーブルから行を選択するときに使用する条件を指定している

select * from employees, orders where orders.id = employees.id and employees.id = '22222' 

。 2番目の選択基準は従来のwhereの選択基準です。

0

2回目のチェックは不要です。オラクルは、A = BかつB = Cの場合、A = Cであることを知るには十分スマートです。あなたはそれを伝える必要はありません。

そのクエリを記述するための最良の方法は、可能な限り最高の計画はemployeeidは「22222」ですordersからすべての行を読み込むことによって開始する場合でも、Oracleはたとえそれを行うには知っているだろう

SELECT  * 
FROM  employees e 
INNER JOIN orders o ON o.employeeid = e.id 
WHERE  e.id = '22222' 

です条件を明示的に指定していません。

AND  o.employeeid = '22222' 

Oracleは、指定した条件から条件を推論します。