아마도 나는 잘못된 방향으로 가고 있습니다. 여기에 내가하려고하는 것과 내 문제가있다.오른쪽 테이블을 두 번째 테이블에 두 번 조인하고 각 별칭 내부를 세 번째 테이블의 두 별칭에 연결합니다.
3 개의 테이블이 있습니다. 자산 (컴퓨터, 네트워크 장치 등) 포트 port_connections (컴퓨터, 네트워크 장치 등의 포트)
그것은 정말 (A port_id_a 및 port_id_b 필드와 링크 각 포트 및 그 함께 각 자산이있다) 오피스 빌딩의 vlans 및 네트워크 장치/컴퓨터를 추적하는 유일한 방법입니다.
저는 방언 3을 사용하는 최신 버전의 파이어 버드를 사용하고 있습니다. 파이어 버드 문제가 아니고 SQL에만 문제가 있다고 가정합니다.
올바른 조인 (port_connections 포트)을 사용하고 WHERE 절의 다른 조인을 수행 할 수 있기 때문에 이것이 가능해야한다는 것을 알고 있습니다. 문제는 자산 테이블을 포트 테이블에 조인 할 때 올바른 조인이 손실된다는 것입니다.
EDIT : 이전 쿼리가 현재 쓸모가 없기 때문에 이것은 내가 사용하고있는 가장 새로운 쿼리입니다. 이 최신 쿼리 내 문제는 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