也许我正在以错误的方式去解决它。这是我想要做的和我的问题。右连接一个表两次到第二个表,每个别名内部连接到一个第三个表的两个别名
我有3张桌子。 资产(计算机,网络设备等) 端口 port_connections(计算机,网络设备等的端口)(具有port_id_a和port_id_b领域和环节的每个端口和用于其各自的资产一起)
这是真的只是一种在办公大楼中跟踪vlans和网络设备/计算机的方法。
我使用最新版本的firebird使用方言3.我假设这不是一个火鸟问题,只是与我的SQL问题。
我知道这一定是可能的,因为我可以用正确的连接(端口连接到port_connections)并在WHERE子句中执行其他连接。与此相关的问题是,当我将资产表加入端口表时,正确的连接会丢失。
编辑:这是我正在使用的最新查询,因为旧的在这一点上是无用的。我对这个最新的查询的问题似乎是通过port_connections表两次拖动链接的项目。所以我会得到正确的port_connections记录,然后我得到一个没有port_connection的单个端口的重复记录。我需要以某种方式摆脱此后的记录,但仍保留没有port_connection记录的其他端口记录。
SELECT
port_connections.connection_id,
asset_a.name AS asset_a_name,
port_a.port AS port_a_name,
port_a.asset_id as asset_a,
asset_b.name AS asset_b_name,
port_b.port AS port_b_name,
port_b.asset_id as asset_b,
port_connections.description
FROM
port_connections
right JOIN ports AS port_a
ON port_connections.port_id_a = port_a.port_id
right JOIN ports AS port_b
ON port_connections.port_id_b = port_b.port_id
left JOIN assets as asset_a
ON asset_a.asset_id = port_a.asset_id
left JOIN assets as asset_b
ON asset_b.asset_id = port_b.asset_id
WHERE
(port_a.asset_id = 2 OR port_b.asset_id = 2)
ORDER BY port_a_name, port_b_name
表: 资产:
ASSET_ID
SYS_ID
LOCATION_ID
NAME
DESCRIPTION
"TYPE"
AQUIRED
DISPOSED
MFG_NAME
TAG_NO
port_connections
"CONNECTION_ID"
PORT_ID_A
PORT_ID_B
DESCRIPTION
港口
PORT_ID
ASSET_ID
PORT
TITLE
DESCRIPTION
"TYPE"
SPEED
编辑:此修复程序是在CONNECTION_ID进入端口表和日是查询然后做我想要的。
SELECT
port_connections.connection_id,
asset_a.name AS asset_a_name,
port_a.port AS port_a_name,
port_a.asset_id as asset_a,
asset_b.name AS asset_b_name,
port_b.port AS port_b_name,
port_b.asset_id as asset_b,
port_connections.description
FROM
port_connections
right JOIN ports AS port_b
ON port_connections.connection_id = port_b.connection_id
right JOIN ports AS port_a
ON port_connections.connection_id = port_a.connection_id
left JOIN assets as asset_a
ON asset_a.asset_id = port_a.asset_id
left JOIN assets as asset_b
ON asset_b.asset_id = port_b.asset_id
WHERE
port_a.asset_id = 2
AND
(port_b.asset_id != 2 or port_b.asset_id is null)
ORDER BY port_a_name
是否可以修改您的问题以包含这三个表的模式?我试图理解连接,没有表格布局就难以把它放在一起。 – SqlRyan 2009-08-19 05:37:20