如何在层次查询中获得不同元素的列表?
-
03-10-2019 - |
题
我有一个数据库表,其中有名字,工作和城市的人。我有第二个桌子,其中包含每个城市公司每项工作的层次结构表示。
假设我在人民桌上有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
我的查询的一部分,以便从我指定的城市中的三个作业中的每一个开始。
我可以执行三个单独的查询以获取我想要的东西,但这并不是很好。例如:
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
在我指定的三个人之上的所有工作中,我还能如何获得独特的列表(或者我可以用独特的话,如果可能的话,也可以将其包裹起来)?
解决方案
请尝试。我没有测试过。
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
不隶属于 StackOverflow