我有一个名为whitelist_email
的表,看起来像这样
+----+---------------------+-------------+
| id | email_suffix | create_date |
+----+---------------------+-------------+
| 1 | stackoverflow.com | 2017-07-07 |
| 2 | example.com | 2017-07-07 |
以及一个名为user_info
的表,其中包含一个名为verified_email
的字段。我想编写一个命令来查找user_info
verified_email
字段不以whitelist_email
中的任何条目结尾的所有行,以便为我提供需要审核的新用户列表。我能用有限的知识做的最好的就是
SELECT verified_email
FROM user_info
WHERE verified_email IN (
SELECT email_suffix
FROM whitelist_email
);
答案 0 :(得分:1)
一种方法是LEFT JOIN
user_info
表到whitelist_email
表,条件是经过验证的电子邮件地址以白名单后缀结尾,然后只保留 匹配任何已知的白名单电子邮件后缀。
SELECT t1.*
FROM user_info t1
LEFT JOIN whitelist_email t2
ON t1.verified_email LIKE CONCAT('%', t2.email_suffix)
WHERE t2.id IS NULL
答案 1 :(得分:0)
SELECT verified_email
from user_info
where SUBSTRING(verified_email,INSTR(reverse(verified_email),".")+1,length(verified_email))
not in (select email_suffix from whitelist_email);
答案 2 :(得分:0)
例如
表user_info
id;verified_email
1;u1@tu.com
2;u2@example.com
表whitelist_email
id;email_suffix
1;example.com
2;stackoverflow.com
查询
select *
from user_info u
where not exists(
select *
from whitelist_email
where whitelist_email.email_suffix=substr(u.verified_email,locate('@',u.verified_email)+1)
)
结果
id,verified_email
1,u1@tu.com
将邮件帐户和邮件域存储在单独的字段中效率更高。