我有四张桌子。
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。
答案 0 :(得分:0)
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
答案 1 :(得分:0)
DocumentAttachment你是否已离开外部加入?
在没有看到您当前的查询的情况下很难确定,但我猜测您已经加入了DocumentAttachment,然后有类似&#34;其中documentattachment.submitted = 1&#34;?< / p>
在这种情况下,我相信它不会返回任何文件附加不存在的行,提交的内容实际上是空的。因此,您可能需要将where语句更改为&#34; where (documentattachment.submitted = 1 or documentattachment.submitted is null)
&#34;
这也假设当填充DocumentAttachment时,默认情况下提交的值为0而不是空值(否则您需要一种不同的方法来确定缺少DocumentAttachment)