我有大约1000封像['a@a.com', 'b@b.com', ..., 'zz@zz.com']
这样的邮件需要检查。如果帐户表中存在电子邮件,则需要拉出与帐户表中电子邮件匹配的行的姓和名。
帐户表如下所示:
CREATE TABLE account (
id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
email VARCHAR(255) NOT NULL,
first_name VARCHAR(255),
last_name VARCHAR(255)
);
在不遍历数组的情况下实现这一点的最佳方法是什么?
首先,使用IN()
语法提取与电子邮件匹配的所有值。
第二,GROUP
的值通过电子邮件删除重复。
第三,通过聚合MIN()
只得到最低值(第一个)。
第四,自定义JOIN
与过滤id
SELECT * FROM account t1
JOIN (
SELECT MIN(id) FROM account
WHERE email IN ('a@a.com', 'b@b.com', ...)
GROUP BY email
) t2 ON t2.id = t1.id