2013-02-26 124 views
0

我有一个名为mainlinks的表,它有大约600万行。有一个名为url的列,其中包含来自网络的url以及另外两列metaTitlemetaDesc,这些列在大多数行中都是空的。比较两个mysql表的值

我有另一个表叫links1它有大约350万行,列URL,UtitlemetaDesclinks1中的所有网址也位于mainlinksLinks1有几百万个网址,在其UtitlemetaDesc列中有标题和meta:描述。我现在试图通过SQL来比较这两个表,并且其中links1有一个URL的标题和说明,以便将该信息复制到mainlinks中的metaTitlemetaDesc

我尝试下面的代码:

UPDATE mainlinks 
INNER JOIN links1 ON (mainlinks.URL = links1.URL) 
SET mainlinks.metaTitle = links1.UTitle, mainlinks.metaDesc = links1.metaDesc 

phpMyAdmin的告诉我,几百记录被更新,虽然我知道一个事实,即它应该是几百万。例如,在URL这两列中仅显示“https://zvelo.com”,但UtitlemetaDesc列中的值未被复制到mainlinks。任何想法可能是什么问题?

TIA!

编辑:可能它可能是其中一个URL列有一些空白后的另一个没有实际的网址,他们因此被视为不同?如果是的话,我怎么能解决这个问题?

+0

两个表上的URL是唯一的吗?是否有可能冗余URL在链接1中有两条记录,其中一条记录有列数据,另一条记录没有,所以在这种情况下,SQL只是将主更新为空......您可以添加条件说'地址links1。 Desc not null'...等等...... – bonCodigo 2013-02-26 17:48:16

+0

@bonCodigo是的,它们是独一无二的......--( – Phil 2013-02-26 17:50:04

+0

@Phil--根据 MySql应该有'TRIM'函数来处理前后空格 – 2013-02-26 18:12:55

回答

0

按我的意见尝试验证空列值...

SET mainlinks.metaTitle = links1.UTitle, mainlinks.metaDesc = links1.metaDesc 
WHERE NOT links1.UTitle IS NULL AND NOT links1.metaDesc IS NULL 
+0

哦,我刚刚看到您的评论,这使我的答案无效。你在比较时检查URL是否有空格? – bonCodigo 2013-02-26 17:55:55

+0

我很想尝试,我只是不知道如何:-)。有任何想法吗? – Phil 2013-02-26 18:08:24

+0

@对不起,我们都住在地球的不同半球;)我可以看到你已经得到了删除空间'修剪'功能的答案。如果您的'mainlinks'表中有一个ID字段,请尝试一段一段地查看您的逻辑/语法实际上是否正常工作。对于例如您可以将ID从1更新为1000.然后,您也可以更容易地进行验证。 – bonCodigo 2013-02-27 02:37:44

0

在这种情况下,得到的答复是摆脱任何换行符,标签等所有列。我用过

UPDATE table SET column = REPLACE(REPLACE(REPLACE(column, '\r', ''), '\n', ''), '\t', ''); 

一旦我在两个表的列上做了这件事,一切都同步了!