需要SQL查询和连接帮助

需要SQL查询和连接帮助,sql,join,Sql,Join,我有四张桌子 文档列表: DocumentID int DocumentDescription varchar(100) DocumentName varchar(100) DocumentTypeCode int Archive ud_DefaultBitFalse:bit DocumentStepID int DocumentID int StepLevelCode int DocumentAttachmentGenID int Document

我有四张桌子

文档列表

DocumentID  int 
DocumentDescription varchar(100)    
DocumentName    varchar(100)    
DocumentTypeCode    int 
Archive ud_DefaultBitFalse:bit
DocumentStepID  int
DocumentID  int
StepLevelCode   int
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 
文档步骤级别

DocumentID  int 
DocumentDescription varchar(100)    
DocumentName    varchar(100)    
DocumentTypeCode    int 
Archive ud_DefaultBitFalse:bit
DocumentStepID  int
DocumentID  int
StepLevelCode   int
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 
文档附件

DocumentID  int 
DocumentDescription varchar(100)    
DocumentName    varchar(100)    
DocumentTypeCode    int 
Archive ud_DefaultBitFalse:bit
DocumentStepID  int
DocumentID  int
StepLevelCode   int
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 
附件

DocumentID  int 
DocumentDescription varchar(100)    
DocumentName    varchar(100)    
DocumentTypeCode    int 
Archive ud_DefaultBitFalse:bit
DocumentStepID  int
DocumentID  int
StepLevelCode   int
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 
  • Documentlist表包含一个文档列表
  • DocumentStepLevel是将DocumentList中的文档与步骤级别关联的表。我们现在有六个步骤,每个步骤都有一些相关文档
  • DocumentAttachment表是在DocumentStepLevel和附件表之间创建关系的连接/关系表
  • 附件表包含上载到系统的实际文件数据
  • 问题:

    我需要编写一个查询来获取以下列

    DocumentList.[DocumentDescription] 
    DocumentList.[DocumentName]
    DocumentStepLevel.[DocumentStepID]
    DocumentStepLevel.[StepLevelCode]
    DocumentAttachment.[DocumentAttachmentGenID]
    DocumentAttachment.[FacilityGenID]
    DocumentAttachment.[Submitted]
    Attachment.[FileName]
    Attachment.[FileDescription]
    Attachment.[UploadDate]
    
    查询应返回特定步骤级别的
    DocumentList
    表中的数据。当
    DocumentAttachment.[Submitted]
    列设置为true时,它还应返回
    DocumentAttachment
    附件
    表中的数据。否则,这些列将不返回任何内容


    我尝试使用左外部联接,但在将提交的列添加到查询时出现了问题。当我添加该列以查询它时,在该标志设置为true之前,停止返回任何数据。

    您留下的是DocumentAttachment吗

    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,然后出现了类似“where DocumentAttachment.submitted=1”的内容

    在这种情况下,我相信它不会返回任何内容,因为对于不存在documentattachment的行,Submited实际上是空的。因此,您可能需要将where语句更改为“
    where(documentattachment.submitted=1或documentattachment.submitted为null)


    这还假设在填充DocumentAttachment时,默认情况下提交的值为0而不是空值(否则,您需要另一种方法来确定是否缺少DocumentAttachment)

    您能显示您尝试使用的查询吗?这正是我所需要的。我把提交的where子句放进去,显然它不能正常工作。谢谢。