【问题标题】:Compare columns on two tables, and update table1 if it's column matches a column in table2比较两个表上的列,如果它的列与 table2 中的列匹配,则更新 table1
【发布时间】:2015-10-05 18:38:30
【问题描述】:

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

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

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    要更新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
    

    这将立即更新所有记录。然后你可以对另一张桌子做同样的事情。只需切换表名即可。

    【讨论】:

    • 谢谢,这看起来比我要使用的函数简单得多。也就是说,电子邮件列并不是唯一的。这有关系吗?
    • 不,没关系。如果可以进行连接,您可以设置列值。
    • 很高兴知道。我终于能够使用正确的数据对其进行测试,并且效果很好。比我原来的方法要快得多。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多