0

我有一个产品数据库,每周都会更新现在的产品。每个产品都有一个用于 UniqueID、供应商、添加日期、产品编号和 ReplacementID 的列。更新产品时,它带有一个新的 UniqueID,但具有相同的供应商 ID 和产品编号,因此我更新旧产品以使用 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