簡體   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