このクエリをより効率的に/正しく実行する方法がわかりません。ここで最初のクエリであると、私は関与しているテーブルを記述することができます。MS Access Update SQLクエリレコードの量が極端に遅く、掛け算されました。
UPDATE agg_pivot_test AS p
LEFT JOIN jd_cleaning AS c
ON c.Formerly = IIF(c.Formerly LIKE '*or*', '*' & p.LyFinalCode & '*', CStr(p.LyFinalCode))
SET p.CyFinalCode = c.FinalCode
WHERE p.CyFinalCode IS NULL AND c.Formerly IS NOT NULL;
agg_pivot_test
は、データの200行を持っており、唯一の99はWHERE p.CyFinalCode IS NULL
の基準に適合する。 JOIN
には説明が必要です。何人かの天才がFormerly
を使用して去年のデータを今年のデータにリンクさせることを決めたので、それはIIF
です。これは文字列です。複数の項目が1つに統合され、「or」(つまり、632 or 631 or 630
など)が使用されることがあるためです。だから今年のデータと一致させたい場合は、Formerly
を使って昨年のLyFinalCode
とマッチさせる必要があります。だから、今年のコードは629
かもしれませんが、632
、631
、または630
だったアイテムを新しいコードにマップするには、Formerly
を使用する必要があります。理にかなっている?そのため、ON
にはIIF
が含まれています。また、Formerly
は文字列で、LyFinalCode
は整数です...楽しいです。
とにかく、クエリを実行すると、再び1807レコードが更新され、200レコードしかなく、条件を満たすレコードは99レコードだけになります。
何が起こっているのか、それを修正する方法についてのご意見はありますか?
LEFT JOINは複数の行に一致します。私はそれを修正する方法はわかりませんが、論理が一致する必要があるため、少なくともLEFT JOINをINNER JOINに置き換えることはできます。 –