需要mySQL特殊查询
在以下情况下,我需要一些帮助: 非常简化的表格需要mySQL特殊查询,mysql,unique,Mysql,Unique,在以下情况下,我需要一些帮助: 非常简化的表格users\u log +-----------------+-------------------+ | id | account_nr | email | +-----------------+-------------------+ | 1 | 0000001 | cust1_@mail.com | | 2 | 0000001 | cust1_@mail.com | | 3 | 0000002
users\u log
+-----------------+-------------------+
| id | account_nr | email |
+-----------------+-------------------+
| 1 | 0000001 | cust1_@mail.com |
| 2 | 0000001 | cust1_@mail.com |
| 3 | 0000002 | cust2_@mail.com |
| 4 | 0000003 | cust3_@mail.com |
| 5 | 0000002 | cust2_@mail.com |
| 6 | 0000001 |cust1_new@mail.com |
+-----------------+-------------------+
CREATE TABLE users_log (ID INT, account_nr VARCHAR(1000), email VARCHAR(1000))
INSERT INTO users_log VALUES (1,'0000001','cust1_@mail.com');
INSERT INTO users_log VALUES (2,'0000001','cust1_@mail.com');
INSERT INTO users_log VALUES (3,'0000002','cust2_@mail.com');
INSERT INTO users_log VALUES (4,'0000003','cust3_@mail.com');
INSERT INTO users_log VALUES (5,'0000002','cust2_@mail.com');
INSERT INTO users_log VALUES (6,'0000001','cust1_new@mail.com');
SELECT account_nr
, email
FROM users_log a
WHERE NOT EXISTS
(SELECT *
FROM users_log b
WHERE a.email != b.email
AND a.account_nr = b.account_nr)
结果:
ACCOUNT_NR EMAIL
1 0000002 cust2_@mail.com
2 0000002 cust2_@mail.com
3 0000003 cust3_@mail.com
这里有一个使用联接而不是子查询的解决方案,子查询的性能通常更好,因为联接可以利用索引,而派生临时表不能
SELECT ul1.account_nr, ul1.email
FROM users_log ul1
LEFT JOIN users_log ul2
ON ul2.account_nr = ul1.account_nr
AND ul2.email <> ul1.email
WHERE ul2.account_nr IS NULL
选择ul1.account\n、ul1.email
从用户日志ul1
左加入用户\u日志ul2
在ul2.account\u nr=ul1.account\u nr上
和ul2.email ul1.email
其中ul2.account\u nr为空
非常感谢您的帮助。我现在必须走了,但明天将检查您的更新解决方案!非常感谢,我也要试试这个