Mysql 从可能包含相同电子邮件地址的结果集中删除行
我有以下MySQL查询Mysql 从可能包含相同电子邮件地址的结果集中删除行,mysql,x-cart,Mysql,X Cart,我有以下MySQL查询 SELECT login, firstname, lastname, email FROM xcart_customers WHERE login LIKE 'anonymous%' AND email NOT IN ( SELECT email FROM xcart_customers AS cx WHERE cx.login NOT LIKE 'an
SELECT
login,
firstname,
lastname,
email
FROM
xcart_customers
WHERE
login LIKE 'anonymous%'
AND email NOT IN (
SELECT
email
FROM
xcart_customers AS cx
WHERE
cx.login NOT LIKE 'anonymous%'
)
GROUP BY
email;
基本上有两组客户,一组是有登录名的客户,另一组是以“anonymous%”登录名开始的匿名客户
我正在尝试从列表中删除与匿名用户具有相同电子邮件地址的非匿名用户
login | firstname | lastname | email
---------------------------------------------------------------------------
anonymous-10 | Eric | Byorn | byorn@mail.com
---------------------------------------------------------------------------
some_user_name | Eric | Byorn | byorn@mail.com
---------------------------------------------------------------------------
我原以为上面的查询会起作用,但我仍然收到一些与非匿名用户匹配的电子邮件地址
login | firstname | lastname | email
---------------------------------------------------------------------------
anonymous-10 | Eric | Byorn | byorn@mail.com
---------------------------------------------------------------------------
some_user_name | Eric | Byorn | byorn@mail.com
---------------------------------------------------------------------------
因此,我试图解决所有匿名用户,他们只出现在匿名结果中。最有效、最优雅的解决方案是使用外部连接:
SELECT
a.login,
a.firstname,
a.lastname,
a.email
FROM xcart_customers a
LEFT JOIN xcart_customers b ON b.email = a.email
AND b.login NOT LIKE 'anonymous%'
WHERE a.login LIKE 'anonymous%'
AND b.email IS NULL
这里有两个关键技巧:
请注意,您对
分组依据的使用既有缺陷也没有必要。您可以共享一些数据吗?好的,添加示例数据@shmoselYour查询返回0行示例数据。你能举一个意外结果的例子吗?除了我在结果中仍然得到重复的电子邮件地址,如果同一个结帐客户有多个匿名行。你没有说任何关于重复的内容。选择DISTINCT…
有效吗?如果没有,请提出一个新问题(因为此问题已得到回答)