2016-03-17 16 views
1

我有一種情況,我再次運行查詢表MEMBERS,MEMBERUDFS和MEMERUDFSETUPS。 MEMBER UDF是用戶定義的字段,由系統管理員創建,用於在可定製字段中存儲有關客戶的數據。 UDFSETUPS表定義可配置的字段,MEMBERUDFS存儲這些字段的值(如果它們存在)。空值不被退回

我遇到的問題是當我拉回數據時,我沒有得到具有ID爲17(MEMBERUDFS.udfid ='17')的UDF沒有條目的條目的行或爲空。我嘗試了左連接,但它似乎沒有幫助。

SELECT MEMBERS.scancode, MEMBERS.fname, MEMBERS.lname, MEMBERS.datejoin, MEMBERS.entrydate 
    , MEMBERS.relationship, MEMBERUDFS.udfvalue 
FROM MEMBERS 
LEFT OUTER JOINMEMBERUDFS 
    ON MEMBERS.memid = MEMBERUDFS.memid 
INNER JOIN MEMBERUDFSETUPS 
    ON MEMBERUDFS.udfid = MEMBERUDFSETUPS.udfid 
WHERE (MEMBERS.siteid = @rvSite) 
    AND (MEMBERS.status = 'A') 
    AND (MEMBERS.relationship = 'M') 
    AND (MEMBERUDFS.udfid = '17') 
    AND (MEMBERS.datejoin BETWEEN @rvStartDate AND @rvEndDate) 
    AND (MEMBERS.mtypeid NOT IN (5, 6, 7, 11, 14, 31)) 
    OR (MEMBERS.siteid = @rvSite) 
    AND (MEMBERS.relationship = 'P') 
    AND (MEMBERUDFS.udfid = '17') 
    AND (MEMBERS.entrydate BETWEEN @rvStartDate AND @rvEndDate) 
+3

你還有一個'INNER JOIN'爲' MemberUDFSetups' –

+0

'memberudf.udfid'在where子句中導致它們被排除在外,您需要將該限制移動到連接或檢查那裏的where子句中的空值。 – xQbert

回答

2

將JoinMemberUDFS的限制移動到連接或您的空值被排除。

首選方法移動過濾器的加入標準

SELECT MEMBERS.scancode, MEMBERS.fname, MEMBERS.lname, MEMBERS.datejoin, MEMBERS.entrydate 
    , MEMBERS.relationship, MEMBERUDFS.udfvalue 
FROM MEMBERS 
LEFT JOIN MEMBERUDFS 
    ON MEMBERS.memid = MEMBERUDFS.memid 
AND MEMBERUDFS.udfid = '17' 
LEFT JOIN MEMBERUDFSETUPS 
    ON MEMBERUDFS.udfid = MEMBERUDFSETUPS.udfid 
WHERE (MEMBERS.siteid = @rvSite 
    AND MEMBERS.status = 'A' 
    AND MEMBERS.relationship = 'M' 
    AND MEMBERS.datejoin BETWEEN @rvStartDate AND @rvEndDate 
    AND MEMBERS.mtypeid NOT IN (5, 6, 7, 11, 14, 31)) 
    OR (MEMBERS.siteid = @rvSite 
    AND MEMBERS.relationship = 'P' 
    AND MEMBERS.entrydate BETWEEN @rvStartDate AND @rvEndDate) 

不推薦使用手柄時,它的空,並確保其用於評估返回true

SELECT MEMBERS.scancode, MEMBERS.fname, MEMBERS.lname, MEMBERS.datejoin, MEMBERS.entrydate 
    , MEMBERS.relationship, MEMBERUDFS.udfvalue 
FROM MEMBERS 
LEFT OUTER JOINMEMBERUDFS 
    ON MEMBERS.memid = MEMBERUDFS.memid 

INNER JOIN MEMBERUDFSETUPS 
    ON MEMBERUDFS.udfid = MEMBERUDFSETUPS.udfid 
WHERE (MEMBERS.siteid = @rvSite 
    AND MEMBERS.status = 'A' 
    AND MEMBERS.relationship = 'M' 
    AND MEMBERS.datejoin BETWEEN @rvStartDate AND @rvEndDate 
    AND MEMBERS.mtypeid NOT IN (5, 6, 7, 11, 14, 31) 
    AND (MEMBERUDFS.udfid = '17' or MEMBERUDFS.udfid is null) 
    OR (MEMBERS.siteid = @rvSite 
    AND MEMBERS.relationship = 'P' 
    AND MEMBERS.entrydate BETWEEN @rvStartDate AND @rvEndDate) 
    AND (MEMBERUDFS.udfid = '17' or MEMBERUDFS.udfid is null) 
+0

我認爲這會殺死MEMBERUDFS.udfid = MEMBERUDFSETUPS.udfid中的左側INNER JOIN MEMBERUDFSETUPS。有一個引用MEMBERUDFSETUPS.udfid – Paparazzi

+0

是的,可能需要左加入memberudfsetups纔是安全的。 – xQbert

+0

謝謝xQbert和狗仔隊!!!!一旦我根據Paparazzi的建議添加左外部連接,我檢索了我正在尋找的結果。謝謝!!! – Merlin