繁体   English   中英

带联接的SQL查询需要帮助

[英]SQL query with joins help needed

我有四个桌子。

DocumentList

DocumentID  int 
DocumentDescription varchar(100)    
DocumentName    varchar(100)    
DocumentTypeCode    int 
Archive ud_DefaultBitFalse:bit

DocumentStepLevel

DocumentStepID  int
DocumentID  int
StepLevelCode   int

DocumentAttachment

DocumentAttachmentGenID int
DocumentStepID  int 
AttachmentGenID int 
FacilityGenID   int 
Submitted   ud_DefaultBitFalse:bit

附件

AttachmentGenId int 
FileName    varchar(255)    
FileDescription varchar(255)    
UploadDate  ud_DefaultDate:datetime 
DocumentData    varbinary(MAX)  
MimeType    varchar(30) 
Archive ud_DefaultBitFalse:bit  
UpdateBy    int 
UpdateDate  ud_DefaultDate:datetime 
  1. Documentlist表包含一个文档列表。
  2. DocumentStepLevel是将DocumentList中的文档与步骤级别相关联的表。 现在我们有六个步骤,每个步骤都有一些相关的文档。
  3. DocumentAttachment表是在DocumentStepLevel和Attachment表之间创建关系的联结/关系表。
  4. 附件表已将实际文件数据上传到系统

题:

我需要编写一个查询,以获取以下各列。

DocumentList.[DocumentDescription] 
DocumentList.[DocumentName]
DocumentStepLevel.[DocumentStepID]
DocumentStepLevel.[StepLevelCode]
DocumentAttachment.[DocumentAttachmentGenID]
DocumentAttachment.[FacilityGenID]
DocumentAttachment.[Submitted]
Attachment.[FileName]
Attachment.[FileDescription]
Attachment.[UploadDate]

查询应从DocumentList表返回特定步骤级别的数据。 DocumentAttachment.[Submitted]列设置为true时,它还应该返回DocumentAttachmentAttachment表中的数据。 否则,这些列将不返回任何内容。

我尝试使用左外部联接,但是当我向查询添加Submitted列时发生问题。 当我添加该列进行查询时,它将停止返回任何数据,直到该标志设置为true。

SELECT  *
FROM    documentStepLevel dsl
JOIN    documentList dl
ON      dl.documentId = dsl.documentId
LEFT JOIN
        documentAttachment da
ON      da.documentStepID = dsl.documentStepId
        AND submitted = 1
LEFT JOIN
        attachment a
ON      a.attachmentGenId = da.attachmentGenId
WHERE   dsl.stepLevelCode = @stepLevelCode

您是否仍是DocumentAttachment外部联接?

很难确定地说没有看到您当前的查询,但是我想您已经外部加入了DocumentAttachment,然后有了类似“ where documentattachment.submitted = 1”的内容?

在这种情况下,我认为它不会返回任何文件,因为不存在文档附件的行,submitted实际上为null。 因此,您可能需要将where语句更改为“ where (documentattachment.submitted = 1 or documentattachment.submitted is null)

这也假设在填充DocumentAttachment时,默认情况下,提交的值为0而不是null值(否则,您将需要使用其他方法来确定是否缺少DocumentAttachment)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM