0

現在の製品で毎週更新される製品のデータベースがあります。各製品には、UniqueID、サプライヤ、追加日、製品番号、ReplacementID の列があります。製品が更新されると、UniqueID は新しくなりますが、supplierID と製品番号は同じです。そのため、古い製品を更新して、ReplacementID を使用して新しい製品 (同じ製品番号、新しい UniqueID) を指すようにします。一部のサプライヤが製品番号を単純化しているとは思いません。古いものと新しいものを一致させる必要があります。例:

旧:BRB-410-12
新:BRB-410

旧:SM999 BL
新:SM999

旧:5555i
新:5555

旧: 346blk
新: 346

基本的には、古い製品番号が新しい製品よりも 1 ~ 4 個の「アイテム」(スペース、ダッシュ、数字、または文字) 長い部分を一致させる必要があります。ここに私がしようとしているものがあります:

select a.UniqueId as OLDID, b.UniqueId as NEWID
from productdata a, productdata b
where a.ProdNum REGEXP CONCAT('^', b.ProdNum, '.?.?.?.?')
and b.UniqueId > a.UniqueId
and b.DateAdded != a.DateAdded
and a.DateAdded != '2013-03-11'
and a.ProdNum !=''
and a.ReplacementId IS NULL
and b.ReplacementId IS NULL
and b.ProdNum !=''
and a.Supplier = b.Supplier);

現在、私のデータベースには約 800,000 個の製品があり、400,000 個の製品には既に ReplacementID があります。これをローカル マシンのステージング データベースで実行しているため、実行中のクエリはこれだけですが、20 時間経ってもまだ機能していません。これらをキャッチするためのより良いクエリを考えられますか?

使用されているすべての列にインデックスがあります。

4

0 に答える 0