i在fielda中具有一个值,而在fieldb中具有另一个值,该值通过下游函数存储为进行比较。我需要比较fielda = fieldb与mySQL一起使用:
Select TableA T1
Inner Join TableB T2
On T1.ID=T2.ID
and T1.FIeldA=T2.FIeldB
Set Matched='Y'
但是,为了确保fielda和fieldb是相同的,因为它们来自不同的来源,我需要运行复杂的标准化mysql更新,例如。
Update TableA set Field1 Set Field1=Replace(Field1,'Gato','Cat) where Field1 like '%Gato%
(我实际上使用Regex来确保该术语在任何地方都是单词,但想保持问题简单,以防万一有人觉得被迫指出上述可能失败的地方)。
问题是我有大约2000个术语需要更新,因此我必须在两个字段上运行所有2000个查询,并且每次进行比较时。
因此,在我看来,理想的解决方案是狮身人面像,我可以在其中言语或regexp,例如。
Gato>Cat
Perro>Dog
索引表,然后使用sphinx比较它们,以使Gato
和Cat
匹配。
但是,我无法找到一种构建Q SPHINXQL查询的方法,该查询在两个字段之间执行Match
,更不用说一个会影响更新的字段了。有没有这样的解决方案?
理论上应该能够使用 SphinxSE
http://sphinxsearch.com/docs/current/sphinxse-using.html
https://mariadb.com/kb/en/mariadb/sphinx-storage-engine/
这使您可以运行sphinx查询"内部" mysql。因此,可以形成一个基于AS Sphinx(sub)查询的更新的MySQL查询(使用子查询)。
如果TableB上具有狮身人面像索引(启用了Wordforms),从理论上讲称为SphIndexB
,例如
UPDATE TableA INNER JOIN SphIndexB
SET Matched = 'Y'
WHERE SphIndexB.query = CONCAT('@FIeldB "^',TableA.Field1,'$" ;mode=extended;limit 1')
...它会很慢,因为它必须在表A上和每一行上运行完整的狮身人面查询 - 唯一的好处是,这一切都发生在mySQL引擎过程中,而不是在应用程序中编码:)