【问题标题】:SQL: Audit Query to Join/Compare Requirements?SQL:审计查询以加入/比较要求?
【发布时间】:2017-08-29 12:54:21
【问题描述】:

我在数据库中有 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

接下来我必须将草稿需求,通过draft fk,加入tbldraftreqs,并通过fk​​ req type 加入req type。我对 tblalbumreqs 中的专辑也是如此。

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

有意义吗?

我希望有任何解决这个难题的建议!

【问题讨论】:

  • 显示示例数据、您尝试但不起作用的查询、您得到了什么结果以及您试图获得什么结果。

标签: sql join compare


【解决方案1】:

我想通了。关于一个问题,我只能解释这么多。如果唯一的cmets是抱怨我解释不够,我会继续自己研究。

无论如何,我希望这可以帮助其他人尝试做同样的加入。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-16
    相关资源
    最近更新 更多