[英]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
题:
我需要编写一个查询,以获取以下各列。
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
和Attachment
表中的数据。 否则,这些列将不返回任何内容。
我尝试使用左外部联接,但是当我向查询添加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.