MySQL:如果此行的另一个值等于10000个值的“列表”中的值,则更新一个值

MySQL:如果此行的另一个值等于10000个值的“列表”中的值,则更新一个值,mysql,sql,Mysql,Sql,我必须更新Mysql compagnie表中的电子邮件字段。我搜索一个解决方案,将每一行与仅包含未订阅电子邮件的列表CSV文件进行比较。如果电子邮件被取消订阅,那么我必须更新此行的新闻稿字段并设置为“否”。可能,我应该导入CSV文件,在我的表格或另一个表格的列中包含10000封内记电子邮件,以便进行比较?另外,我认为应该创建一个索引并锁定表 例如,要进行更新,但我必须手动输入电子邮件: CREATE INDEX idx ON compagnie (emails); LOCK TABLES co

我必须更新Mysql compagnie表中的电子邮件字段。我搜索一个解决方案,将每一行与仅包含未订阅电子邮件的列表CSV文件进行比较。如果电子邮件被取消订阅,那么我必须更新此行的新闻稿字段并设置为“否”。可能,我应该导入CSV文件,在我的表格或另一个表格的列中包含10000封内记电子邮件,以便进行比较?另外,我认为应该创建一个索引并锁定表

例如,要进行更新,但我必须手动输入电子邮件:

CREATE INDEX idx ON compagnie (emails); 
LOCK TABLES compagnie WRITE;
UPDATE compagnie SET newsletter='NO' WHERE email='user@mail.com';
UNLOCK TABLES compagnie WRITE;

不需要,只需内爆电子邮件列表,并在单个查询中进行比较,如

CREATE INDEX idx ON compagnie (emails); 
LOCK TABLES compagnie WRITE;
UPDATE compagnie SET newsletter='NO' WHERE email IN( ... );
UNLOCK TABLES compagnie WRITE;
。。。将替换为CSV中的所有电子邮件


例如在“email1”、“email2”、“email3”中,…

最简单的方法是有两列,unsubscribe和subscribe。使用join更新订阅表

更新订阅 设置时事通讯=否
从subscribe加入subscribe.email=unsubscribe.email上的unsubscribe

你肯定喜欢突破字符串长度的限制!我知道max_allowed_数据包的最大容量为1Gb,但仍然…@dnagirl-我相信这只是一个匹配和更新任务10000*100字节=100Mb,仍然可以。如果您将这个长查询保存到一个文件中,并使用mysql执行