2017-08-29 48 views
0

我在数据库中有2个部分。草稿和专辑。所以我们得到一张专辑的草稿。草稿有要求,稍后会创建一个专辑。该专辑也有要求,但双方的要求是独立输入的。有些会改变,被删除,新增加的等。我试图做一个查询来比较这些要求,当一个专辑被指定为来自特定的草稿。SQL:审计查询加入/比较需求?

表结构是这样的:

草稿:ID,字段草案

草案要求:身份证,FK草案,需求类型FK

专辑:ID,Drafk FK(不是立即需要,但将只能够对进行审计草案,如果不为空),专辑场

相册要求: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