2016-12-08 7 views
0

私は混乱している、我々はから句のSELECT文を書くことができますし、もしそうなら、なぜそれができます。SQLネストされた選択でcaluseから

SELECT v.employee_id, v.last_name, v.lev 
    FROM 
     (SELECT employee_id, last_name, LEVEL lev 
     FROM employees v 
     START WITH employee_id = 100 
     CONNECT BY PRIOR employee_id = manager_id) v 
    WHERE (v.employee_id, v.lev) IN 
     (SELECT employee_id, 2 FROM employees); 
+1

あなたの質問は何ですか? –

+0

私はfrom節のselectの使い方を尋ねます。 – Pune

答えて

1

答えはイエス、あなたが使用することができます。 fromのselect句は、インラインビューとして機能します(結果を保持するためにdatabseが作成する一時的なテーブルと見なしてください)。例えば :上記のクエリで

SELECT sdt sdat 
     FROM (SELECT SYSDATE sdt FROM dual); 

、デュアルFROM SELECT SYSDATEのSDTが最初に実行され、出力は次のようであろう:呼び出され(一時テーブルとしてこれを使用して、そして

sdt 
    --- 
    08-Dec-2016 16:20:56 

そのような場合のインライン・ビュー)、oracleはこのデータに対して外部セレクトを実行します。したがって、SELECT sdt FROM ...が実行され、最終出力は次のようになります。

sdat 
    ---- 
    08-Dec-2016 16:20:56 
+0

ありがとう、ありがとうございました。** FROM ** call ** INLINE **ビューで** SELECT **ステートメントを書くことを理解しました。 – Pune

1

私は複数の理由が考えられます

WITH X (employee_id, last_name, lev) 
AS (

    SELECT employee_id, last_name, 0 AS lev 
    FROM employees 
    WHERE manager_id IS NULL 

    UNION ALL 

    SELECT e.employee_id, e.last_name , lev + 1 
    FROM employees e 
    INNER JOIN x ON x.employee_id = e.manager_id 

    ) 
SELECT v.employee_id, v.last_name, v.lev 
FROM X 
WHERE lev = 2 
+0

私は彼がOracleを使用していると思うが、質問では確かにそのように見える。 –

+0

OPに心が変わっていない限り、質問には「SQL Server」というタグが付けられました。 –

+0

OPはすでに機能するクエリを持っていて、単にWHERE句の使い方を尋ねています。 –

1

.....あなたのようなものになるだろう、SQLサーバーで再帰CTEを探していると思います。 from句で選択クエリを書くと、インラインビューが作成されます。

これは、クエリから上位N個の結果を得るために、私が考えることができるもの

  1. です。
  2. from句自体を制限することによってデータを制限することができます。

トップnクエリの回答を確認してください。

How do I limit the number of rows returned by an Oracle query after ordering?

関連する問題