質問

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

ピープルテーブルに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 私のクエリの一部が、私が指定した都市の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人を超えるすべてのジョブの個別のリストを他にどのように取得することができますか(または、不可能でないにしても明確ではないにしても包むことができます)。

役に立ちましたか?

解決

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

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;

他のヒント

これは機能するはずです:

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 
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top