2013-07-25 113 views
0

我必須加入兩個表,並從一個表中刪除行中不存在的第二個表。我正在嘗試下面的查詢。我應該只刪除7條記錄,但它會刪除整個PERSONS表。訪問2010查詢刪除哪裏存在不工作

DELETE PERSONS.* 
FROM PERSONS 
WHERE EXISTS (
    SELECT PERSONS.[IR NUMBER], 
     PERSONS.[Last Name], 
     PERSONS.[First Name], 
     PERSONS.DOB, 
     PERSONS.[Name Type] 
    FROM 1 tblPERSON 
    RIGHT JOIN PERSONS 
     ON (
      iif(isnull([1tblPERSON].DOB) = true, "01/01/9999", [1tblPERSON].DOB) = 
      iif(isnull(PERSONS.DOB) = true, "01/01/9999", PERSONS.DOB) 
     ) 
     AND ([1tblPERSON].FIRSTNAME = PERSONS.[First Name]) 
     AND ([1tblPERSON].LASTNAME = PERSONS.[Last Name]) 
     AND ([1tblPERSON].NAMETYPELIT = PERSONS.[Name Type]) 
     AND ([1tblPERSON].INCINMBR = PERSONS.[IR Number]) 
    WHERE (
     (
      (PERSONS.[IR Number]) IN (
      SELECT [QryIncinmbrsForDelete] ! [INCINMBR] 
      FROM [QryIncinmbrsForDelete] 
      ) 
     ) 
     AND (
      (PERSONS.[Last Name]) NOT IN (
      "UNKNOWN", 
      "UNK", 
      "UKNOWN" 
      ) 
     ) 
     AND ((IsNull([1tblPERSON].[INCINMBR])) = True) 
     ) 
    ) = true; 

編輯:

在這個例子中... 1,DOE,JOHN,1960年1月1日,卡斯特將被刪除

1tblPERSON:

INCINMBR Last Name First Name DOB  NameType 
1  DOE  JON  1/1/1960 Cust 
1  SMITH  JOHN  2/2/1965 Emp 
1  JONES  JAY  3/3/1965 Cust 

人數:

INCINMBR Last Name First Name DOB  NameType 
1  DOE  JON  1/1/1960 Cust 
1  SMITH  JOHN  2/2/1965 Emp 
1  JONES  JAY  3/3/1965 Cust 
1  DOE  JOHN  1/1/1960 Cust 
+0

絕對需要上面建議的更多信息。我已經快速查看了查詢,並且應該考慮正確的外連接是否適合您的需求,因爲即使沒有找到匹配,它也會返回右表(人員)中的所有記錄,但是之後的過濾在where子句中應該減少返回的行。看一些涉及的數據肯定會對此有所幫助。 – ChrisProsser

+0

1tblPERSON: INCINMBR姓氏名字DOB NAMETYPE 1 DOE JON 1960年1月1日卡斯特 1 SMITH JOHN 1965年2月2日的Emp 1 JONES JAY 1965年3月3日卡斯特 人數: 1 DOE JON 1/1/1960 Cust 1 SMITH JOHN 2/2/1965 Emp 1 JONES JAY 3/3/1965 Cust 1 DOE JOHN 1/1/1960 Cust 在這個例子中...... 1,DOE,JOHN,1/1/1960,Cust將被刪除 – Lele

+0

我不確定這是否合理,因爲我無法在此帖子中獲得正確的格式。數據如下。 1tblPERSON: INCINMBR姓氏名字DOB NAMETYPE 1 DOE JON 1960年1月1日卡斯特 1 SMITH JOHN 1965年2月2日的Emp 1 JONES JAY 1965年3月3日卡斯特 人數: 1 DOE JON 1/1/1960 Cust 1 SMITH JOHN 2/2/1965 Emp 1 JONES JAY 3/3/1965 Cust 1 DOE JOHN 1/1/1960 Cust – Lele

回答

0

問題我如果你沒有告訴刪除語句從人員中刪除什麼,你告訴它刪除所有如果你的子查詢返回任何結果(並且據我所知,你期望它返回7?)

如果您可以提供一些關於您的鑰匙的更多信息,那麼我可以給你一個完整的解決方案。

+0

它基本上是INCINMBR,lastname,firstname,dob,nametype的組合鍵。我想過這樣一個事實,即存在可能沒有指定要刪除的記錄,但無法弄清楚如何通過組合鍵來執行where equals或where in。我可能必須創建兩個查詢 - 一個使用select來獲取7行,並在第二個查詢中使用它來刪除。 – Lele

+0

您可能只需連接關鍵字段並進行比較即可。但說實話,我很難理解你想要做什麼。我已將您評論中的示例數據添加到您的原始問題 - 您可以檢查並確認我是否正確? – StevieG

+0

我會嘗試連接字段也。我在PERSONS表中有大約4000行,在1tblPERSON表中有500行。 1tblPERSON中的數據更新,因爲它是從主數據源中提取的,但它的數據也少得多(僅更新了數天的數據)。我必須用1tblPERSON表中的數據追加,刪除和更新PERSONS表。對於刪除,如果incinmbr存在於PERSONS表上,並且名稱/ dob/nametype組合不存在於該incinmbr的人員上,則我將其從人員中刪除。 – Lele