代码之家  ›  专栏  ›  技术社区  ›  snowflakes74

从mysql表中查找唯一联系人

  •  0
  • snowflakes74  · 技术社区  · 4 年前

    我继承了一个清理起来有点棘手的数据库。我需要将联系人正确地与学生联系起来。数据库模式如下:

    桌子

    Student : [Id, Name, ParentEmail]
    
    Contact:[Id, Name, StudentId]
    

    联系人表中的数据有误,一些联系人附错了学生。只要[ParentEmail]相同,同一联系人可以分配给两个不同的学生。

    我需要在[联系人]表中找到分配给错误学生的所有联系人(即一个或多个具有不同家长电子邮件的学生),因为他们不来自同一个家庭。

    样本数据

    Student
    
        Id Name parentEmail
        ===================
        1  Jim   [email protected]
        2. Bob   [email protected]
        3. Rob   [email protected]
    
    Contact:
       Id  Name       StudentId
       =========================
       1  Jim's Dad     1
       2  Jim's Dad     2  
       3. Jim's Dad     3
       4. Rob's Mum     3
    

    这是我用有限的mysql知识提出的问题:

    select name as ContactName from contact group by name having count(studentID) > 1;
    

    我如何将其链接回学生表,并确定ParentEmail不正确,联系人表中的记录3不正确,因为联系人姓名和ParentEmail不同。

    1 回复  |  直到 4 年前
        1
  •  1
  •   Neo    4 年前

    我假设每个学生都可以有多个联系人,比如爸爸的电子邮件和妈妈的电子邮件。我将依赖的策略是假设@之前的电子邮件部分将包含其中一个孩子的名字,即吉姆和鲍勃是兄弟。这部分将用于根据“孩子的父母”的命名来获取正确的父母。

    SELECT * FROM 
    Contact, Student
    WHERE student.id = contact.studentID
    AND contact.name 
    NOT LIKE CONCAT('%',LEFT(student.parentEmail,LOCATE('@',student.parentEmail) - 1),'%')