2017-01-22 18 views
-3

我有以下表格“地址”。它有三列“ID”,“SameAsID”,“街”选择相关的行而无需比较街道名称

ID  SameAsID   Street  
    -------------------------------------------- 
    1       88 happy ave 
    2   1    88 happy ave 
    3   1    88 happy ave 
    4   3    88 happy ave 
    5   3    88 happy ave 
    6   3    88 happy ave 
    7       11 lucky street 
    8   7    11 lucky street 
    9   7    11 lucky street 
    10  6    88 happy ave 
    11  5    88 happy ave 

现在,我想选择所有相关的ID = 1的ID,但不比较Street列,将输出以下 1 ,2,3,4,5,6,10,11

如何编写此SQL而不比较街道列?

+1

来吧 - 当你要求协助一个家庭作业问题时,你需要表明你已经做出了某种努力。 –

+0

这不是一个家庭作业问题。我只是简化了这个问题。如果更改了根ID的街道,我需要编写一个存储过程来更新所有街道。 – user1968481

+0

我真的需要帮助。 – user1968481

回答

2

基本的分层查询。你说你想要唯一的ID;如果需要,你可以选择id,sameasidstreet,这不会有什么区别。

注意输入在with子句中的测试数据。这不是解决方案的一部分;该查询只是五行。

with 
    address (ID, SameAsID, Street) as (  
     select 1, null, '88 happy ave' from dual union all 
     select 2, 1, '88 happy ave' from dual union all 
     select 3, 1, '88 happy ave' from dual union all 
     select 4, 3, '88 happy ave' from dual union all 
     select 5, 3, '88 happy ave' from dual union all 
     select 6, 3, '88 happy ave' from dual union all 
     select 7, null, '11 lucky street' from dual union all 
     select 8, 7, '11 lucky street' from dual union all 
     select 9, 7, '11 lucky street' from dual union all 
     select 10, 6, '88 happy ave' from dual union all 
     select 11, 5, '88 happy ave' from dual 
    ) 
-- End of test data (not part of SQL query). Query begins BELOW THIS LINE. 
select  id 
from  address 
connect by sameasid = prior id 
start with id = 1 
order by id -- if needed 
; 

ID 
--- 
    1 
    2 
    3 
    4 
    5 
    6 
10 
11 

8 rows selected.