我正在尝试将两个查询合并为一个,并且不能让我的大脑围绕如何嵌套选择。第一个查询如下:
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 :(得分: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;