Mysql内连接具有一对多的重复记录

时间:2014-08-25 17:56:38

标签: mysql sql database

假设我在桌子下面

学生

id  Name
-------------------
1   john
2   carlos
3   zoya
4   arab
5   amir

电子邮件

id      email   student_id
--------------------------
1   a@mail.com      1
2   b@mail.com      2
3   c@mail.com      2
4   d@mail.com      3
5   e@mail.com      4

并使用sql查询获取学生姓名和电子邮件,

SELECT student.name, email.eid FROM student 
INNER JOIN email 
ON student.id = email.student_id

它会给出以下输出,

Name        eid
-------------------
john    a@mail.com
carlos  b@mail.com
carlos  c@mail.com
zoya    d@mail.com
amir    e@mail.com

此处返回carlos的重复条目(实际上并不重复), 但我只想要单个学生列表,例如:b@gmail.comc@gmail.com并不重要。

Name        eid
-------------------
john    a@mail.com
carlos  b@mail.com
zoya    d@mail.com
amir    e@mail.com

我在sql方面经验不多,

我已经使用了DISTINCT,但它无效......请帮忙

不是:我将电子邮件存储在不同的表中,以备将来需要时使用。

2 个答案:

答案 0 :(得分:0)

您遇到了问题,因为有些学生有多封电子邮件,而您只需要一封电子邮件。如果您不关心哪一个,请使用MIN()MAX()

SELECT s.name, MIN(e.eid)
FROM student s INNER JOIN
     email e
     ON s.id = e.student_id
GROUP BY s.name;

如果你关心哪一个,那么你需要解释多次选择的逻辑。

答案 1 :(得分:-2)

这应该有效

SELECT distinct student.name, email.eid FROM student 
INNER JOIN email 
ON student.id = email.student_id

为什么您将电子邮件存储在不同的表中然后加入它们,您可以将它们存储在学生表中,这样可以使设计更简单,查询更容易。