2013-08-21 137 views
0

如何從表中刪除不匹配的行?我有兩張有大部分相關記錄的表格。表B必須存在於表B中。如果表B的記錄不存在,則表A刪除表B的記錄。當第一個表中不存在相應的記錄時刪除記錄

我希望有一種方法來執行此查詢,而不是編碼來填充數據表,並通過每個reocrd進行交互以查看是否存在匹配。

表A

keyid的, foreignID, 文本

表B

keyid的, 的recordId, 文本

foriegnID和的recordId是相關領域。我沒有設計這些表格。

Somethins這樣....

DELETE * FROM TableB WHERE (SELECT [foreignID] FROM TableA) <> recordID; 

更新:我可以retireve記錄需要與查詢被刪除,但我想只刪除它們。

SELECT * FROM TableA LEFT JOIN TableB ON TableA.[foreignID] = TableB.[recordID] WHERE (((TableB.recordID) Is Null)); 

我正在使用vb.net處理一系列Access數據庫。

+1

請向我們展示一下表結構的例子,如果您不想共享信息,可以添加一些虛擬數據。你的問題沒有包含足夠的說明讓任何人回答你。你還想要查詢嗎? – Bojan

+1

訪問有一個內置的「查找懸掛記錄」選項已經爲你做這個... –

回答

1

您可以在Access SQL中使用DCount Function,無論查詢是從Access會話內運行還是從VB.Net或其他客戶端代碼運行,它都可以工作。

SELECT查詢開始,以確認它的目標是正確的TableB行。

SELECT b.* 
FROM TableB AS b 
WHERE DCount("*", "TableA", "foreignID =" & b.recordID) = 0; 

在人類語言中,DCount表現手法「給我TableA中的行數,其中foreignID值當前表B行的recordId值相匹配。」您想要確定該計數爲零的TableB行。

注意我假定foreignIDrecordID的數字數據類型。如果它們是文本,則必須將引號中的值b.recordID括起來。

當您準備好拉動觸發器時,請轉換爲DELETE查詢。

DELETE 
FROM TableB AS b 
WHERE DCount("*", "TableA", "foreignID =" & b.recordID) = 0; 
相關問題