2015-12-28 40 views
1

我想將兩個查詢合併爲一個,無法讓我的大腦圍繞如何嵌套選擇。第一個查詢是這樣的:複雜的Oracle查詢

select SYSTEM,UPSTREAM_INTERFACE_ID,DOWNSTREAM_INTERFACE_ID 
from SYSTEM_POLL where DEVICE_ID = '738224'; 

它返回給定device_id的系統名稱和上/下接口...非常基本。

其中變得複雜的是我需要從一個單獨的表中查找up/down接口的接口名稱。

select * from INTERFACE_POLL where interface_id in 
(UPSTREAM_INTERFACE_ID,DOWNSTREAM_INTERFACE_ID) and SYSTEM_NAME = SYSTEM 

返回結果:

INTERFACE_ID * SYSTEM_NAME * POLL_DATE * INTERFACE_NAME 
**************************************************************** 

84357177  * hillsboro.nj * 20151228 * cable-upstream 4/2/6.0 

151617592 * hillsboro.nj * 20151228 * cable-downstream 8/7/6 

你結合,從而給設備ID的查詢將返回兩個相關聯的INTERFACE_NAME值怎麼辦。

在此先感謝您的幫助。

回答

0

使用表別名。下面是一個簡單的例子:

select SYSTEM,UPSTREAM_INTERFACE_ID,DOWNSTREAM_INTERFACE_ID, i1.interface_name, i2.interface_name 
from SYSTEM_POLL, interface_poll i1, interface_poll i2 
where system_poll.upstream_interface_id = i1.interface_id 
and system_poll.downstream_interface_id = i2.interface_id 
4

要加入到一個表一次以上,使用表的別名

SELECT 
     sp.SYSTEM 
    , sp.UPSTREAM_INTERFACE_ID 
    , sp.DOWNSTREAM_INTERFACE_ID 
    , i1.interface_name upstream_name 
    , i2.interface_name downstream_name 
FROM SYSTEM_POLL sp 
     INNER JOIN interface_poll i1 ON sp.upstream_interface_id = i1.interface_id 
     INNER JOIN interface_poll i2 ON sp.downstream_interface_id = i2.interface_id 
; 
+0

和別名的列,所以你知道哪個是哪個。 '...,i1.interface_name作爲UPSTREAM_INTERFACE_NAME,i2.interface_name作爲DOWNSTREAM_INTERFACE_NAME ...' –

+0

@Shannon Severance好點,謝謝,我在select子句中添加了列別名 –

0

感謝所有,這是需要什麼!由於存在重複interface_id與不同的系統名稱的所有我需要添加是哪裏,但以下最終得到了我所需要的結果:

選擇 sp.SYSTEM ,i1.interface_name upstream_name ,i2.interface_name downstream_name FROM SYSTEM_POLL SP INNER JOIN interface_poll I1開sp.upstream_interface_id = i1.interface_id INNER JOIN interface_poll I2開sp.downstream_interface_id = i2.interface_id WHERE DEVICE_ID = '738224' AND sp.SYSTEM = i1.SYSTEM_NAME AND sp.SYSTEM = i2.SYSTEM_NAME;