Mysql内部加入一对多的重复记录

标签 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 但它不会工作.. 请帮忙

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

最佳答案

你有问题,因为一些学生有多个电子邮件,而你只查找一个。如果您不关心是哪一个,则使用 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;

如果您确实关心哪一个,那么您需要解释在多个之间进行选择的逻辑。

关于Mysql内部加入一对多的重复记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25491672/

相关文章:

php - SQL : alter table `familymembers` add constraint `familymembers_user_id_foreign` foreign key (`user_id` ) references `all_users` (`id` ) in laravel

sql - 插入表格的特定行

android - 在 recyclerView 的行内处理按钮单击

database - Oracle 闪回数据存档版本查询与连接?

PHP + SQL : Search for event in the same day, 同月,无论年份

PHP Mysql连接问题

sql - 结果SQL结果从Grails Controller 到下拉列表框

sql - 在 PostgreSQL 中获取行的序列(链表)

android - No Such Column Sugar ORM 仅在发布版本中

mysql - 与mysql数据库的连接