3

名前、仕事、都市で識別される人々を含むデータベーステーブルがあります。すべての都市の会社のすべての仕事の階層表現を含む 2 番目のテーブルがあります。

people テーブルに 3 人いるとします。

[name(PK),title,city]
Jim, Salesman, Houston
Jane, Associate Marketer, Chicago
Bill, Cashier, New York

また、ジョブ テーブルには何千ものジョブ タイプと場所の組み合わせがあり、そのサンプルを次に示します。parent_title はタイトルへの外部キーであるため、階層関係を確認できます。

[title,city,pay,parent_title]
Salesman, Houston, $50000, CEO
Cashier, Houston, $25000
CEO, USA, $1000000
Associate Marketer, Chicago, $75000
Senior Marketer, Chicago, $125000

.....

start with私が抱えている問題は、私の Person テーブルが複合キーであるため、指定した都市の 3 つの仕事のそれぞれから始まるようにクエリの一部を構造化する方法がわからないことです。

必要なものを取得するために 3 つの個別のクエリを実行できますが、これではうまくスケーリングできません。例えば:

select * from jobs
start with city = (select city from people where name = 'Bill') and title = (select title from people where name = 'Bill')
connect by prior parent_title = title
UNION
select * from jobs
start with city = (select city from people where name = 'Jim') and title = (select title from people where name = 'Jim')
connect by prior parent_title = title
UNION
select * from jobs
start with city = (select city from people where name = 'Jane') and title = (select title from people where name = 'Jane')
connect by prior parent_title = title

指定した 3 人を超えるすべてのジョブの個別のリストを取得するには (または、不可能な場合は個別にラップすることもできます)、他にどのようにすればよいでしょうか?

4

2 に答える 2

2

これを試してください。私はこれをテストしていません。

SELECT  distinct *
FROM    jobs
START   WITH ( city, title ) IN 
     ( SELECT city, title
       FROM   people
       WHERE  name IN ( 'Bill', 'Jim', 'Jane' )
     )
CONNECT BY PRIOR parent_title = title;
于 2010-05-20T06:07:02.290 に答える
1

this should work:

SQL> SELECT *
  2    FROM jobs
  3   START WITH (title, city) IN (SELECT title, city FROM people)
  4  CONNECT BY PRIOR parent_title = title;

TITLE              CITY           PAY PARENT_TITLE
------------------ ------- ---------- ------------
Associate Marketer Chicago       7500 
Salesman           Houston       5000 CEO
CEO                USA         100000 
于 2010-05-20T08:14:00.520 に答える