SQL:审核查询以加入/比较需求?

时间:2017-08-29 12:54:22

标签: sql join compare

我在数据库中有2个部分。草稿和专辑。所以我们得到一张专辑的草稿。草稿有要求,后来创建了专辑。该专辑也有要求,但双方的要求是独立输入的。有些会改变,被删除,新的添加等等。我正在尝试进行查询以比较这些要求,当专辑被指定为来自特定的草稿时。

表结构如下所示:

草稿:ID,草稿字段

要求草案: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中的专辑也有同感。

当我尝试加入这些时,我得不到任何结果,即使两者都有要求。问题是,我直接将草稿加入专辑,但后来我需要两个要求,并且要求他们一起或单独排队,这取决于他们是否都有相同的要求。

有意义吗?

我喜欢解决这个难题的任何指针!

1 个答案:

答案 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