也許我正在以錯誤的方式去解決它。這是我想要做的和我的問題。右連接一個表兩次到第二個表,每個別名內部連接到一個第三個表的兩個別名
我有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