mysql left join 右表多條記錄
MySQL中的LEFT JOIN語句用於從左表(table1)中返回所有記錄,即使右表(table2)中沒有匹配的記錄。如果右表有多條匹配左表中一條記錄的記錄,結果中將會有多個行反映這一點。
例如,有兩個表:
-
employees
(左表)
employee_id | employee_name |
---|---|
1 | John Doe |
2 | Jane Smith |
-
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;