自连接查询分层数据

时间:2014-05-13 03:23:40

标签: sql database oracle self-join

我很难理解下面的问题:

  

找到技能C ++编程所需技能直接需要的所有技能的名称。 > (例如,C ++编程需要C编程和C编程需要读写)。

表格SREQUIRED如下: enter image description here enter image description here

我做的SQL查询是:

SELECT 
    s1.requires 
FROM 
    srequired s1
    INNER JOIN
    srequired s2 
ON 
    s1.sname = s2.requires
    AND
    s2.sname = 'C++ programming';

注意:解决方案必须使用self-join实现。

我做得对吗?我正在使用SQL PlusOracle DB。感谢。

1 个答案:

答案 0 :(得分:1)

您正在寻找

CONNECT BY PRIOR

SELECT sname,
       requires,
       LEVEL
FROM srequired
START WITH sname = 'C++ programming' CONNECT BY
PRIOR sname = requires
ORDER SIBLINGS BY sname;

在此处阅读更多分层查询:Oracle doc

对于使用SELF JOIN的跨DBMS:Hierarchical queries in MySQL