mysql left join的时候又表是多条记录的话,会出现冗余的情况

mysql left join 右表多条记录

MySQL中的LEFT JOIN语句用于从左表(table1)中返回所有记录,即使右表(table2)中没有匹配的记录。如果右表有多条匹配左表中一条记录的记录,结果中将会有多个行反映这一点。

例如,有两个表:

  1. employees (左表)

employee_id employee_name
1 John Doe
2 Jane Smith
  1. salaries (右表)

employee_id salary year
1 50000 2019
1 52000 2020
2 60000 2019

如果你想要获取所有员工及其薪资信息,即使某些员工没有薪资信息,你可以使用LEFT JOIN:

SELECT e.employee_id, e.employee_name, s.salary, s.year
FROM employees e
LEFT JOIN salaries s ON e.employee_id = s.employee_id;

这将返回:

employee_id employee_name salary year
1 John Doe 50000 2019
1 John Doe 52000 2020
2 Jane Smith 60000 2019

如果你注意到,由于John Doe有两个薪资条目,在结果集中他会显示两次,与右表中的每条记录匹配。这是LEFT JOIN的特性之一,它保证了左表(employees)中的所有记录都会出现在结果集中,即使右表(salaries)中没有匹配的记录。

 

如果为了保证leftjoin的记录的唯一性,右边可以采用distint获取一下唯一性:

SELECT e.employee_id, e.employee_name, s.salary, s.year
FROM employees e
LEFT JOIN (SELECT DISTINCT ON (employee_id) * FROM salaries) as  s ON e.employee_id = s.employee_id;

 

posted @ 2024-04-03 00:06  若-飞  阅读(451)  评论(0编辑  收藏  举报