复杂的Oracle查询

时间:2015-12-28 22:18:35

标签: sql 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值。

提前感谢您的帮助。

3 个答案:

答案 0 :(得分: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
;

答案 1 :(得分: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

答案 2 :(得分:0)

谢谢大家,这正是所需要的!由于存在重复的具有不同系统名称的interface_id,我需要添加的是WHERE,但以下最终得到了我需要的结果:

选择       sp.SYSTEM     ,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 WHERE DEVICE_ID ='738224'AND sp.SYSTEM = i1.SYSTEM_NAME AND sp.SYSTEM = i2.SYSTEM_NAME;