2013-02-18 56 views
3

我正在使用xml顯示查詢結果。我有一個問題與我的查詢有關。在客戶表中說我有一個數據的ID不是任何其他表中的forigne鍵,但我仍想顯示數據。我一個,使用左連接這個。但問題在於其他表條件(Where子句pr.fActive = 1 ...),因此我無法顯示僅在客戶表中存在但不在其他表中的數據。如何可以做到有條件Where子句可選

<Table>customer cu</Table> 
      <Joins> 
      left join customerprogramxref cuprxref on cu.ixcustomer=cuprxref.ixcustomer 
      left join tblprogram pr on cuprxref.ixprogram=pr.ixprogram 
      left join programworkpackagexref prwpxref on pr.ixprogram= prwpxref.ixprogram 
      left join workpackage wp on wp.ixworkpackage =prwpxref.ixworkpackage 
      left join workpackageactivityxref wpactxref on    wpactxref.ixworkpackage=wp.ixworkpackage 
      left join activity act on act.ixactivity=wpactxref.ixactivity 
      </Joins> 
      <WhereClause> 
      cu.fStatus=1 AND pr.fActive=1 AND pr.fDeleted=0 AND wp.fStatus=1 AND act.fStatus=1 
      </WhereClause> 

回答

2

由於LEFT JOIN,在沒有連接的情況下,右邊部分爲NULL。

試試這個:

cu.fStatus=1 
     AND (pr.fActive=1 OR pr.fActive IS NULL) 
     AND (pr.fDeleted=0 OR pr.fDeleted IS NULL) 
     AND ... 
3

試圖把其他條件一樣(Where子句pr.fActive = 1 ...)與它的相對留下使用

例加入條款。 ..

LEFT JOIN tblprogram PR ON cuprxref.ixprogram = pr.ixprogram AND pr.fActive = 1 AND pr.fDeleted = 0

希望,這將有所幫助。

2

入住這在WHERE子句:

cu.fStatus=1 OR (pr.fActive=1 AND pr.fDeleted=0 AND wp.fStatus=1 AND act.fStatus=1) 
+0

你確定嗎?.. – 2013-02-18 11:27:59

2

你能不能試着用嵌套查詢:

這樣的事情,

SELECT finalMap.ixCustomer,finalMap.ixprogram, finalMap.ixWorkPackage, 
FROM customer t 
left outer join 
(SELECT t.ixCustomer,cpRef.ixprogram, cpRef.ixWorkPackage 
FROM customerprogramxref t 
left outer join 
(SELECT pRef.ixprogram, pRef.ixWorkPackage FROM tblprogram pr 
left outer join 
(SELECT t.ixprogram,w.ixWorkPackage FROM programworkpackagexref t 
left outer join 
(SELECT wpa.ixWorkPackage FROM workpackage w 
left outer join 
(SELECT wpactxref.ixWorkPackage FROM workpackageactivityxref wpactxref 
left outer join (SELECT t.ixactivity FROM activity t where t.fStatus=1) act 
on act.ixactivity=wpactxref.ixactivity) wpa on w.ixworkpackage =wpa.ixworkpackage 
where w.fStatus=1) w on t.ixWorkPackage = w.ixWorkPackage) pRef 
on pr.ixprogram = pRef.ixprogram 
where pr.fActive=1 AND pr.fDeleted=0)cpRef 
on t.ixprogram=cpRef.ixprogram)finalMap 
on t.ixCustomer=finalMap.ixCustomer 
where t.fStatus=1; 
+0

我只是試圖與嵌套查詢..它會工作,但執行時間會更多 – 2013-02-18 12:03:29