0
根據一系列規則,根據數據存在或不存在的情況,我有兩個數據表我想要合併到一個統一表中。我開始根據第一條規則填充表格。刪除語句不刪除我認爲應該的所有記錄
INSERT INTO CombinedData
SELECT a.matchingField,
CASE
WHEN a.FieldOne IS NULL
THEN b.FieldOne
ELSE a.FieldOne
END as FieldOne,
CASE
WHEN a.FieldTwo IS NULL
THEN b.FieldTwo
ELSE a.FieldTwo
END as FieldTwo,
a.FieldThree, b.FieldFour, a.DataDate
FROM TableA a
JOIN TableB b
ON a.matchingField = b.matchingField
AND a.DataDate = b.DataDate
雖然我這樣做了,但我想從表A和表B中刪除用於填充表的記錄。部分原因是這些表格非常大,這個第一個標準將覆蓋大約90%的記錄,因此刪除它們會提高後續聯接的所有性能。更重要的是,擁有這些記錄會影響後續的一些決策邏輯。
於是,我嘗試刪除這些記錄:
DELETE a
FROM TableA a
INNER JOIN CombinedData cd
ON a.matchingField = cd.matchingField
AND a.DataDate = b.DataDate
然而,當我看到已刪除的記錄數,這比創造的記錄(約50%的數目顯著較少,或取決於90%哪個表)。
所以我的問題是,這個查詢爲什麼不刪除所有已經插入到新表中的記錄?
因此,將'DELETE a'更改爲'SELECT *'並查看返回的行,並找出爲什麼您的標準未得到滿足。在不知道所涉及的列的數據類型的情況下回答這個問題也很困難;例如,日期時間值難以在沒有工作的情況下完全匹配,因爲行之間的時間差異很小。 –
你知道內部連接是做什麼的嗎?我不認爲你這樣做。 – developerwjk