2017-08-29 3 views
0

私はデータベースに2つのセクションを持っています。下書きとアルバム。だから、アルバムのドラフトを手に入れます。下書きには要件があり、後でアルバムが作成されます。そのアルバムには要件もありますが、両面の要件は個別に入力されます。一部は変更され、削除されたり、新しいものが追加されたりします。アルバムが特定のドラフトから来ていると割り当てられたときに、それらの要件を比較するクエリを作成しようとしています。SQL:要件を結合/比較するためのクエリを監査しますか?

は、テーブルの構造は次のようになります。

下書き:ID、ドラフトフィールド

ドラフトの要件:ID、ドラフトFK、要件の種類FK

アルバム:ID、Drafk FKは(すぐに必要ではありませんこれがnullでない場合、唯一、)、アルバムフィールド案に対して監査することができるようになります

アルバム要件:ID、アルバムFK、要件の種類FK

だから私は、次のようにクエリを作成したい:

ドラフトフィールド、アルバムフィールド、ドラフトの要件、アルバムの要件

それは(コードを言い訳のようになります10個の要件がある基本的にあれば、望みましたあなたが本当に見ることができるように)、テーブルを作成しよう:

<style type="text/css"> 
 
.tg {border-collapse:collapse;border-spacing:0;} 
 
.tg td{font-family:Arial, sans-serif;font-size:14px;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;} 
 
.tg th{font-family:Arial, sans-serif;font-size:14px;font-weight:normal;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;} 
 
.tg .tg-yw4l{vertical-align:top} 
 
</style> 
 
<table class="tg"> 
 
    <tr> 
 
    <th class="tg-yw4l">Draft Req</th> 
 
    <th class="tg-yw4l">Album Req</th> 
 
    </tr> 
 
    <tr> 
 
    <td class="tg-yw4l">R1</td> 
 
    <td class="tg-yw4l">R1</td> 
 
    </tr> 
 
    <tr> 
 
    <td class="tg-yw4l">R2</td> 
 
    <td class="tg-yw4l"></td> 
 
    </tr> 
 
    <tr> 
 
    <td class="tg-yw4l">R3</td> 
 
    <td class="tg-yw4l"></td> 
 
    </tr> 
 
    <tr> 
 
    <td class="tg-yw4l"></td> 
 
    <td class="tg-yw4l">R4</td> 
 
    </tr> 
 
    <tr> 
 
    <td class="tg-yw4l">R5</td> 
 
    <td class="tg-yw4l">R5</td> 
 
    </tr> 
 
    <tr> 
 
    <td class="tg-yw4l">R7</td> 
 
    <td class="tg-yw4l"></td> 
 
    </tr> 
 
    <tr> 
 
    <td class="tg-yw4l"></td> 
 
    <td class="tg-yw4l">R8</td> 
 
    </tr> 
 
    <tr> 
 
    <td class="tg-yw4l">R9</td> 
 
    <td class="tg-yw4l">R9</td> 
 
    </tr> 
 
</table>

これはドラフトのためだけの基本的な情報と、クエリの最初の部分でありますアルバム:

SELECT vw_CMP_Contacts.ContactNo, vw_CMP_Contacts.ContactName, vw_CMP_Matches.MatchNo, vw_CMP_Matches.MatchName, 
    tblContactDraft.txtOrganization, tblDraftStatus.txtDraftStatus, tblMAlbumStatus.txtAlbumStatus, tblAlbumType.txtAlbumType 
    FROM ((((vw_CMP_Matches 
    INNER JOIN (tblMAlbums INNER JOIN tblContactDraft ON tblMAlbums.FKContactDraft = tblContactDraft.ID) ON vw_CMP_Matches.CM_MID = tblMAlbums.FKMatch) 
    INNER JOIN tblDraftStatus ON tblContactDraft.FKDraftStatus = tblDraftStatus.ID) 
    INNER JOIN tblMAlbumStatus ON tblMAlbums.FKMAlbumStatus = tblMAlbumStatus.ID) 
    INNER JOIN tblAlbumType ON tblMAlbums.FKAlbumType = tblAlbumType.ID) 
    INNER JOIN vw_CMP_Contacts ON vw_CMP_Matches.ContactNo = vw_CMP_Contacts.ContactNo 

次に私は、ドラフトFKにより、ドラフトの要件に参加するtbldraftreqsし、そしてFK reqをタイプ別REQタイプがあります。私はtblalbumreqsのアルバムのために同じを持っています。

私はそれらを結合しようとすると、どちらの要件もありますが、結果は得られません。問題は、私は直接ドラフトにアルバムに参加していますが、両方の要件が同じであるかどうかによって、両方の要件が必要であり、一緒にまたは単独で並べる必要があります。

意味がありますか?

私はこの難解を解決するためのあらゆる指針を愛しています!

+0

サンプルデータ、正常に動作しなかったクエリ、取得した結果、取得しようとしている結果を表示します。 –

答えて

0

私はそれを理解しました。私は質問について説明することができるだけです。唯一のコメントが私が十分に説明しなかったと不平を言うならば、私は自分自身で研究を続けるでしょう。

とにかく、これは他の誰かが同じ種類の参加をしようとするのに役立ちます。

SELECT mc.ID as mcid, mc.FKContactDraft as Draftid, rq.ID, rq.txtRequirementType, Draft.FKRequirementType AS DraftReq, cont.FKRequirementType AS MCReq 
from tblMAlbums mc 
full join tblReqType rq on 1=1 
left join tblContactDraftRequirements Draft on mc.FKContactDraft = Draft.FKContactDraft and rq.ID = Draft.FKRequirementType 
left join tblMAlbumRequirements cont on mc.ID = cont.FKMC and rq.ID = cont.FKRequirementType 
where mc.FKContactDraft is not null 
関連する問題