OK、私は次のような動作をしています。SQL JOINとUNIONを一緒に使用する
私は「取引ヘッダ」テーブルと「取引詳細」テーブルを持っています。特定の機能の場合、詳細テーブルは「備考」データを抽出するために少しの正規化を必要とします。各明細レコードには、TranRemark1、TranRemark2およびTranRemark3列で指定された最大3つの注釈を含めることができます。
私はそれがうまくいくと思ったが、間違った数のレコードを返します。
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;
私が得る結果セットがCLIENTNAMEませTranDetailからwhere句と一致するレコードの数と一致しTranHeaderレコードの数に基づいています。たとえば、クライアント "Acme Inc."ヘッダーテーブルに3つのレコードがあり、上記のクエリを「1234」(これはTranDetailの1つのレコードと一致する)の注釈コードに使用します。結果セットには正しいレコードが3回表示されます。
EDIT だから私はこのような結果セットを取得するために、上記の例から期待:
ClientName--TranID--TranRemark1--TranDateOfService--TranPayment
Acme Inc ADC11 1234 8-16-2011 45.11
私は何を得ることはこれです:
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
があることを覚えておいてくださいTranHeaderのクライアントの複数のレコードにすることができます。
私は右と完全に結合しようとしましたが、すべて同じになります。
ここで問題が解決しませんか?
ありがとうございました。
どのRDBMSを使用していますか?期待される結果がどのようなものかの例を教えてください。 – Vache
なぜTranHeaderで左結合を使用していますか?あなたの問題はTrandHeaderのTrandetailにあるレコードと一致する複数のレコードですか? – HLGEM
Vache - MSSQL 2008 - 結果セットに関する質問を更新します。 HLGEM、問題はTranDetailから重複を取得していることです。クライアントは複数のヘッダートランザクションを持つことができ、その数が何であれ、トランドラスタルレコードにはその倍数が掛けられます。 – nth