需要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 |
+-----------------+-------------------+
  • 允许客户在此表中多次出现
  • 客户可以随时更改其电子邮件地址,旧条目不会更新
  • 正如您所看到的,帐户“0000001”出现了3次,并且在某个时候更改了他的电子邮件地址

    我需要一个只返回从未更改过电子邮件地址的客户结果的查询。此外,我需要所有单个条目,因此不需要分组。

    因此,客户“0000002”和“0000003”的所有条目都将是上述示例中查询的预期结果

    我找到了一种在脚本语言中使用多个循环的方法,但不知道是否有一种更有效的查询可以用来减少数据库负载? 这是一个非常大的数据库,我需要尽可能快的查询-提前谢谢你

    PS:数据库结构是这样的,我没有办法改变任何东西

    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为空
    
    非常感谢您的帮助。我现在必须走了,但明天将检查您的更新解决方案!非常感谢,我也要试试这个