比较两个表上的列,如果它的列与 table2 中的列匹配,则更新 table1

Posted

技术标签:

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

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

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

【问题讨论】:

【参考方案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

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

【讨论】:

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

以上是关于比较两个表上的列,如果它的列与 table2 中的列匹配,则更新 table1的主要内容,如果未能解决你的问题,请参考以下文章

选择表中的列与另一个表中的列不同的数据

如何一次比较二维数组的2列与python中另一个数组的列

两个文件中的AWK列匹配,打印不同的列

创建一个触发器,当另一个表中的列更新时更新一个表上的列

用另一个表上的值更新新添加的列

Pyspark - 如何将转换后的列与原始 DataFrame 合并?