2015-10-05 61 views
1

好的,所以我有两个表。两者都充满了电子邮件。根据电子邮件地址是否出现在另一个表中,我需要将列更新为“true”或“false”。目前,我的计划是在PHP中编写一个函数来检查每一行,但它非常慢(循环内循环检查一行有250 000行的表与130 000行的表,这意味着32 500 000 000个查询)。比较两个表上的列,并更新table1,如果它的列匹配表2中的列

是否有更简单或更快捷的方式来执行此操作?我一直在寻找,但没有找到太多。

回答

2

更新table1并设置栏为true,如果该电子邮件未在其他表中找到和FALSE如果存在的话,你可以使用LEFT JOIN

update table1 
left join table2 on table1.email = table2.email 
set table1.bool_col = case when table2.email is null 
          then 'true' 
          else 'false' 
         end 

此预订购一次更新所有记录。然后你可以为另一个表做同样的事情。只需切换表名。

+0

谢谢,看起来比我要使用的功能简单得多。也就是说,电子邮件栏不是唯一的。这是否重要? –

+0

不,这没关系。如果可以创建连接,则可以设置列值。 –

+0

很高兴知道。我终于能够用正确的数据进行测试,并且效果很好。比我原来的方法要快得多。非常感激! –

相关问题