2010-03-24 60 views
1

我有一个联系人表和一个邮政编码数据表。更新REGEX MYSQL

我需要匹配邮政编码的第一部分和连接,与邮政编码表...然后执行更新...

我想要做这样的事情...

UPDATE `contacts` LEFT JOIN `postcodes` ON PREG_GREP("/^[A-Z]{1,2}[0-9][0-9A-Z]{0,1}/", `contacts`.`postcode`) = `postcodes`.`postcode` SET `contacts`.`lat` = `postcode`.`lat`, `contacts`.`lng` = `postcode`.`lng` 

是否有可能?或者我需要使用外部脚本?

非常感谢。

回答

0

我决定从不同的角度接近它。 ..可能会有一些冲突,但我可以忍受。

UPDATE fellow f INNER JOIN postcode p ON f.postcode LIKE CONCAT(p.postcode, "%") SET f.lat = p.lat, f.lng = p.lng 
+0

除非你将LEFT OUTER JOIN更改为INNER JOIN或者添加WHERE子句,否则你刚更新同伴表中的所有记录,其中一些可能为空值。这是你的意图吗? – 2010-03-24 14:13:33

+0

好点。刚刚编辑... – Simon 2010-03-25 17:02:10

0

林不知道你用的是什么的正则表达式,但如果你只需要第一[长度]个字符是相同的,这将工作:

update c 
set c.lat = p.lat, c.lng = p.lng 
from contacts c 
inner join postcodes p 
    on substring(c.postcode, 0, [LENGTH]) = substring(p.postcode, 0, [LENGTH] 
+0

Contacts表具有完整的邮政编码,例如“W1A 1AA”和邮政编码表只有“W1A” ......麻烦的是数据是不一致所以可以写成“W1A1AA”或“w1A1aA”。 – Simon 2010-03-24 12:36:04

+0

似乎mysql不支持这样的捕获,所以如果你想完美的话,你将不得不创建一个脚本:/ – Fabian 2010-03-24 14:05:50