Using SQL JOIN and UNION together Using SQL JOIN and UNION together sql-server sql-server

Using SQL JOIN and UNION together


Can you try replacing:

LEFT JOIN TranHeader AS b ONb.TranID = a.TranIDWHERE a.TranRemark1 = @RemarkCode;

with:

LEFT JOIN  ( SELECT DISTINCT        TranId, ClientName    FROM TranHeader  ) AS b ONb.TranID = a.TranIDWHERE a.TranRemark1 = @RemarkCode;


How about

SELECT  b.ClientName,  a.TranID,  a.TranRemark1,  a.TranDateOfService,  a.TranPaymentWHERE a.TranRemark1 = @RemarkID JOIN TranHeader b ON b.TranID = a.TranIDUNION ALLSELECT  b.ClientName,  a.TranID  a.TranRemark2,  a.TranDateOfService,  a.TranPaymentWHERE a.TranRemark2 = @RemarkID JOIN TranHeader b ON b.TranID = a.TranIDUNION ALLSELECT  b.ClientName,  a.TranID,  a.TranRemark3,  a.TranDateOfService,  a.TranPaymentWHERE a.TranRemark3 = @RemarkID JOIN TranHeader b ON b.TranID = a.TranID

?

I initially suggested

SELECT  b.ClientName,a.TranID,a.TranRemark1,a.TranDateOfService,a.TranPayment,a.TranRemark1,a.TranRemark2,a.TranRemark3   FROMTranDetail a JOIN TranHeader As b ONb.TranID = a.TranIDWHERE a.TranRemark1 = @RemarkCode   OR a.TranRemark2 = @RemarkCode   OR a.TranRemark3 = @RemarkCode;

but thought you probably want a separate line for each remark?


If doing a UNION ALL, then do a SELECT DISTINCT on the OUTER SQL. If doing a UNION, it will take care of the duplicates.

The UNION ALL with a DISTINCT gives better performance though I believe....