2010-06-01 2 views
2

에서 결과 집합 2005단일 SQL 서버는 SQL 서버를 사용하여 하나에 두 결과를 병합하는 방법에 대한 조언을 바랍니다 쿼리

나는 Account 최대 두 Settlement Instructions을 가질 수 있고,이과 같이 모델링 된 상황이 :

슬림 - 에드 아래 스키마 :

Account 
--------------------- 
Id 
AccountName 
PrimarySettlementId (nullable) 
AlternateSettlementId (nullable) 


SettlementInstruction 
---------------------- 
Id 
Name 

내가 원하는 출력을 내 봄에 일부 자바 객체를 구성 할 수 있도록이의 라인을 따라 select 문 뭔가가있는 single result set입니다 행 매퍼 :

select 
    Account.Id as accountId, 
    Account.AccountName as accountName, 

    s1.Id as primarySettlementId, 
    s1.Name as primarySettlementName, 

    s2.Id as alternateSettlementId, 
    s2.Name as alternateSettlementName 

나는 여러 가지를 시도했지만 기본 및 대체 FK 년대가 null 아닌 하나의 통합 결과 집합을 얻을 수있는 방법을 찾을 수 없습니다.

마침내 나는 포럼을 수색했지만, 내가 필요한 것에는 맞지 않는 것으로 보인다.

답변

6

외부 연결이 필요합니다.

select 
    Account.Id as accountId, 
    Account.AccountName as accountName, 

    s1.Id as primarySettlementId, 
    s1.Name as primarySettlementName, 

    s2.Id as alternateSettlementId, 
    s2.Name as alternateSettlementName 
from Account 
    left join SettlementInstruction s1 ON s1.Id = Account.PrimarySettlementId 
    left join SettlementInstruction s2 ON s2.Id = Account.SecondarySettlementId 
where /* ... */ 
+0

이것은 정답입니다. – Kenneth

+0

제가 원했던대로 정확하게 감사했습니다. Hibernate를 사용하는 데 너무나 많은 시간이 SQL 기술을 파괴합니다. – JamesC

1

당신은 뭔가를 시도 할 수 :

SELECT 
    a.Id as accountId, 
    a.AccountName as accountName, 
    'Primary' as Settlementtype 
    s1.Name as primarySettlementName, 
FROM 
    Account a 
INNER JOIN 
    SettlementInstruction s1 ON a.PrimarySettlementId = s1.Id 
UNION 
SELECT 
    a.Id as accountId, 
    a.AccountName as accountName, 
    'Alternate' as Settlementtype 
    s2.Name as 'AlternateName', 
FROM 
    Account a 
INNER JOIN 
    SettlementInstruction s2 ON a.AlternateSettlementId = s2.Id 

당신을 위해 그 일을합니까?

여기에는 계정에 PrimarySettlementId가있는 경우와 대체가 null이 아닌 계정/결제의 두 번째 목록이있는 경우에 대한 모든 계정/결제 방법 목록이 나와 있습니다. 둘 다 NULL 인 경우는 생략됩니다. 일부 Account 인스턴스가 복제 될 수 있습니다 (ID 필드가 모두 유효하고 널이 아닌 경우).

그렇지 않은 경우 : 정확히 당신이 찾고있는 것이 무엇입니까 ??

+1

감사합니다. 귀하의 설명대로했으나 찾고있는 것이 아닙니다 (도움을 청하기 위해 +1). – JamesC

+0

@JamesC : 피드백과 +1에 감사드립니다. 크게 환영합니다. –

관련 문제