2014-02-13 140 views
1

所以它的短的一端是這是我想要做的,但我不知道正確的語法。當字段「IS NULL」加入另一個字段時 - 訪問2007

表1,表2 名稱,SSN,DOB,列表,日期

我想要做一個LEFT JOIN使用SSN,但是當SSN字段爲空,我希望它加入的DOB場名字匹配的地方。

由於文件是19k條記錄,我不能加入名稱,其中大多數是常用名稱。

回答

0

我相信你可以用簡單的LEFT JOIN和正確的JOIN條件做你想做的事。 Access中的技巧是它不像左連接,括號太少。如有疑問,請添加更多括號。您會對Access中的成功感到驚訝。

SELECT 
    T1.*, 
    T2.* 
FROM 
    (Table1 AS T1 
    LEFT JOIN Table2 AS T2 ON (
     (T1.SSN = T2.SSN) 
     OR (
     (T1.SSN IS NULL) 
     AND (T1.DOB = T2.DOB) 
     AND (T1.Name = T2.Name) 
    ) 
    )); 

如果這不起作用,請讓我知道,我會看看我能做些什麼。

請注意,您可能會也可能不能在GUI查詢編輯器中轉到此設計視圖。

另請注意,由於NULL不等於NULL,所以在ORX.SSN IS NOT NULL之前不需要附加條件。

+0

隨着一些調整,我設法讓這個工作。我用了很多括號,但現在我發現我的語法錯了......按照慣例。謝謝您的幫助。 – Oedhel

+0

你介意分享我的查詢是不是正確的,無論是通過編輯帖子或描述它,或通過指向我在網上的另一個地方,我可以看到? – ErikE

+0

說實話,我想要做的比我所問的要複雜得多,這只是基本的語法,我錯了 - 你澄清。 – Oedhel

2

也許:

SELECT * 
FROM Table7 
INNER JOIN Table8 
ON Table7.SSN = Table8.SSN 
WHERE Table8.SSN Is Not Null 
UNION 
SELECT * 
FROM Table7 
INNER JOIN Table8 
ON Table7.DOB = Table8.DOB 
WHERE Table8.SSN Is Null 

注意,結果將無法修改。

+0

顯然我讓它比它更難。我在做各種各樣的嵌套等等。我會試一試,看看它是否有效。 – Oedhel

+0

我確實嘗試過這種方式,並且因爲什麼原因它不適用於LEFT JOIN。我給了我適當的產品,沒有我需要的第一張表中的額外行。 – Oedhel

+0

該點是兩個內連接的聯合,不需要左連接。 – Fionnuala

1

把它分解成2查詢

/1查詢/ 選擇

LEFT JOIN ... ... WHERE Table2.SSN是NOT NULL

UNION /*第二個查詢*/ SELECT ..... FROM TABLE1 t1, TABLE2 t2 WHERE t2.SSN is NULL

相關問題