Brug af SQL JOIN og UNION sammen

OK, jeg snublede over, hvorfor jeg får følgende adfærd.

Jeg har en "transaktionsoverskrift" -tabel og "transaktionsdetalje" -tabel. For en bestemt funktion kræver detaljetabellen en smule normalisering for at udtrække "Bemærkning" -data. Hver detaljeoptegnelse kan indeholde op til 3 bemærkninger udpeget af kolonnerne TranRemark1, TranRemark2 og TranRemark3.

Jeg sammensatte følgende forespørgsel og tænkte at det ville fungere, men det returnerer det forkerte antal poster.

SELECT  
b.ClientName,
a.TranID,
a.TranRemark1,
a.TranDateOfService,
a.TranPayment   
FROM
(select TranRemark1, TranID from TranDetail
union all
select TranRemark2, TranID from TranDetail
union all
select TranRemark3, TranID from TranDetail) AS a
LEFT JOIN TranHeader AS b ON
b.TranID = a.TranID
WHERE a.TranRemark1 = @RemarkCode;

Resultatsættet Jeg får er baseret på antallet af TranHeader-poster, der matcher ClientName IKKE antallet af poster, der matcher hvor-klausulen fra TranDetail. For eksempel hvis klient "Acme Inc." har 3 poster i overskriftstabellen, og jeg bruger ovenstående forespørgsel til bemærkningskode "1234" (som kun matcher 1 post i TranDetail), resultatsættet viser den korrekte post 3 gange.

EDIT Så jeg forventer fra ovenstående eksempel at få et resultatsæt som dette:

ClientName--TranID--TranRemark1--TranDateOfService--TranPayment
Acme Inc    ADC11   1234         8-16-2011          45.11    

Hvad jeg får er dette:

ClientName--TranID--TranRemark1--TranDateOfService--TranPayment
Acme Inc    ADC11   1234         8-16-2011          45.11    
Acme Inc    ADC11   1234         8-16-2011          45.11  
Acme Inc    ADC11   1234         8-16-2011          45.11  

Husk at der kan være flere poster for en klient i TranHeader.

Jeg har prøvede rigtigt og fuldt sammenføjning, men det hele kommer ens ud.

Hvor mangler jeg problemet?

Tak for hjælpen.

7
задан Andriy M 16 August 2011 в 20:34
поделиться