Discussions
Categories
- 197K All Categories
- 2.5K Data
- 546 Big Data Appliance
- 1.9K Data Science
- 450.8K Databases
- 221.9K General Database Discussions
- 3.8K Java and JavaScript in the Database
- 31 Multilingual Engine
- 552 MySQL Community Space
- 479 NoSQL Database
- 7.9K Oracle Database Express Edition (XE)
- 3.1K ORDS, SODA & JSON in the Database
- 556 SQLcl
- 4K SQL Developer Data Modeler
- 187.2K SQL & PL/SQL
- 21.4K SQL Developer
- 296.3K Development
- 17 Developer Projects
- 139 Programming Languages
- 293K Development Tools
- 110 DevOps
- 3.1K QA/Testing
- 646.1K Java
- 28 Java Learning Subscription
- 37K Database Connectivity
- 158 Java Community Process
- 105 Java 25
- 22.1K Java APIs
- 138.2K Java Development Tools
- 165.3K Java EE (Java Enterprise Edition)
- 19 Java Essentials
- 162 Java 8 Questions
- 86K Java Programming
- 81 Java Puzzle Ball
- 65.1K New To Java
- 1.7K Training / Learning / Certification
- 13.8K Java HotSpot Virtual Machine
- 94.3K Java SE
- 13.8K Java Security
- 205 Java User Groups
- 24 JavaScript - Nashorn
- Programs
- 468 LiveLabs
- 39 Workshops
- 10.2K Software
- 6.7K Berkeley DB Family
- 3.5K JHeadstart
- 5.7K Other Languages
- 2.3K Chinese
- 175 Deutsche Oracle Community
- 1.1K Español
- 1.9K Japanese
- 233 Portuguese
再帰クエリについて

環境:OracleDB 10.2.0.5
以下の表から、
従業員コード 上司コード
00003 00001
00004 00003
00007 00004
00005 00001
00006 00002
従業員コードを1つ設定して、
00003 00001
00004 00003
00007 00004
のデータを取得するSQL文を書く場合、どのようにしたらよいでしょうか?
まずは、以下のような自己結合で実行してみましたが、
従業員コードに00003を指定した場合、「00003 00001」の値が取得できませんでした。
SELECT
部下.従業員コード,
上司.上司コード
FROM 従業員 AS 部下
JOIN 従業員 AS 上司
ON 部下.上司コード = 上司.従業員コード
WHERE 部下.従業員コード = '[条件値]'
また、以下の再帰クエリを実行してみましたが、
従業員コードに00004を指定した場合、「00007 00004」の値が取得できませんでした。
SELECT
従業員コード,
上司コード
FROM 従業員
START WITH 従業員コード = '[条件値]'
CONNECT BY 従業員コード = PRIOR 上司コード
Answers
-
図でイメージするOracleのSQL全集 第6回 階層問い合わせ
http://www.oracle.com/technetwork/jp/articles/otnj-sql-image6-1352143-ja.html
のconnect by NoCycleを見ながら、
UnionFindチックな階層問い合わせをしてみました
[code]
with t(従業員コード,上司コード) as(
select '00003','00001' from dual union
select '00004','00003' from dual union
select '00007','00004' from dual union
select '00005','00001' from dual union
select '00006','00002' from dual)
select 従業員コード,上司コード
from t
start with 従業員コード = '00004'
connect by NoCycle prior 上司コード = 従業員コード
or prior 従業員コード = 上司コード;
従業員コード 上司コード
------------ ----------
00004 00003
00003 00001
00007 00004
[/code]