我有以下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 'anonymous%'
)
GROUP BY
email;
基本上有两组客户,即拥有登录权限的客户,以及所有以“匿名%”登录信息开头的匿名客户。
我正在尝试从列表中删除与匿名用户具有相同电子邮件地址的非匿名用户。
我认为上述查询会有效,但我仍然会收到一些与非匿名用户匹配的电子邮件地址。
login | firstname | lastname | email
---------------------------------------------------------------------------
anonymous-10 | Eric | Byorn | byorn@mail.com
---------------------------------------------------------------------------
some_user_name | Eric | Byorn | byorn@mail.com
---------------------------------------------------------------------------
所以我试图解决所有匿名用户,他们只出现在匿名结果中。
答案 0 :(得分:1)
最有效,恕我直言的优雅解决方案是使用外部联接:
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
这里有两个关键技巧:
请注意,您使用GROUP BY
既有缺陷也没必要。