2015-06-25 220 views
0

我想寫一個查詢,涉及3個表格,並將其中兩個連接到主要的一個。訪問左連接不工作,因爲我想象它

SELECT UNIT_MAIN.UNIT_NO, DEPT_MAIN.LEV_2, Card.CardNumberLong AS [Some 
Number], Card.Enabled, F_CARD.CARD_NO, F_CARD.END_DT 
FROM (((UNIT_MAIN 
INNER JOIN DEPT_MAIN ON UNIT_MAIN.USING_DEPT = DEPT_MAIN.DEPT_ID) 
LEFT JOIN Card ON (UNIT_MAIN.UNIT_NO = Card.UnitCode AND Card.Enabled = True)) 
LEFT JOIN F_CARD ON (UNIT_MAIN.UNIT_ID = F_CARD.ASSIGNED_ID AND (F_CARD.END_DT) Is Null )) 
WHERE (((UNIT_MAIN.STATUS)="A") AND ((DEPT_MAIN.LEV_2)="AM") AND ((Card.Enabled)=True)) 
OR (((UNIT_MAIN.STATUS)="D") AND ((DEPT_MAIN.LEV_2)="AM") AND ((Card.Enabled)=True)) 

我遇到的問題是,當F_CARD表有行,其中的F_CARD.END_DT不爲空,導致主表(單位表)不露面,即使它是一個左連接和F_CARD錶行不滿足連接條件(或我相信)。

我在F_CARD表上沒有任何where子句,它們只在連接條件中。

編輯 當我執行

LEFT JOIN MFIVE_F_CARD ON (MFIVE_UNIT_DEPT_COMP_MAIN.UNIT_ID = MFIVE_F_CARD.ASSIGNED_ID AND ((MFIVE_F_CARD.END_DT) Is Null) 

如果F_CARD表載有有一個END_DT行的單元不出現,我相信,因爲左連接條件不合格,內表(單位表)應該出現不管。

如果我從查詢中刪除任何與F_CARD相關的值,則顯示我正在查找的缺失單位。它是內連接,左連接,左連接。當發生第二次左連接時,即使它們出現,我也會丟失行。

我縮小了連接範圍,只用F_CARD做了左邊的內部操作。嘗試查看爲什麼它不返回連接失敗的行。

試着做以下,但即時得到一個不支持加入錯誤...

SELECT 
    UNIT_MAIN.UNIT_NO 
    ,DEPT_MAIN.LEV_2 
    ,Card.CardNumberLong AS [SomeNumber] 
    ,Card.Enabled 
    ,F_CARD.CARD_NO 
    ,F_CARD.END_DT FROM 
    (
     (
      (
       UNIT_MAIN 
       INNER JOIN DEPT_MAIN 
       ON UNIT_MAIN.USING_DEPT = DEPT_MAIN.DEPT_ID 
      ) 
      LEFT JOIN Card 
      ON (UNIT_MAIN.UNIT_NO = Card.UnitCode AND Card.Enabled = True) 
     ) 
     LEFT JOIN F_CARD 
     ON (UNIT_MAIN.UNIT_ID = F_CARD.ASSIGNED_ID AND F_CARD.END_DT Is Null) 
    ) WHERE 
    (UNIT_MAIN.STATUS = "A" OR UNIT_MAIN.STATUS = "D") 
    AND DEPT_MAIN.LEV_2 = "AM" 

感謝。

回答

0

我有一種感覺,那是因爲你有你的加入正在做布爾檢查,而不是表之間匹配的記錄,即

Card.Enabled = True(F_CARD.END_DT) IS NULL

試着將查詢到的條款:

SELECT 
    UNIT_MAIN.UNIT_NO 
    ,DEPT_MAIN.LEV_2 
    ,Card.CardNumberLong AS [SomeNumber] 
    ,Card.Enabled 
    ,F_CARD.CARD_NO 
    ,F_CARD.END_DT 
FROM 
    (
     (
      (
       UNIT_MAIN 
       INNER JOIN DEPT_MAIN 
       ON UNIT_MAIN.USING_DEPT = DEPT_MAIN.DEPT_ID 
      ) 
      LEFT JOIN Card 
      ON UNIT_MAIN.UNIT_NO = Card.UnitCode 
     ) 
     LEFT JOIN F_CARD 
     ON UNIT_MAIN.UNIT_ID = F_CARD.ASSIGNED_ID 
    ) 
WHERE 
    (UNIT_MAIN.STATUS = "A" OR UNIT_MAIN.STATUS = "D") 
    AND DEPT_MAIN.LEV_2 = "AM" 
    AND Card.Enabled = True 
+0

這裏的問題是,Card.Enabled和F_CARD.END_DT是NULL不屬於「Where」條件,除非我指定所有可能性。 – user2859406