簡體   English   中英

一對一關系的單個SQL SELECT查詢

[英]Single SQL SELECT query for one to many relationship

沒有示例就很難解釋這個問題。

我有2張桌子, 公司員工 ,他們有一對多的關系,一個公司可以參加許多員工。

這里顯示了最簡單的表結構

Company
| id | name |

Employee
| id | name | company_id | join_date |

現在的問題是:

如何選擇前2名員工並在公司表中的列中顯示其加入日期?

所以結果看起來像這樣

| id |  company_name |  first_employee_join_at |  second_employee_join_at |

假設在employee表中有一個外鍵列company_id

with emps as (
  select id, name, company_id, 
         row_number() over (partition by company_id order by join_date) as rn
  from employee
)
select c.id, c.name as company_name, 
       e1.join_date as first_employee_join_at, 
       e2.join_date as second_employee_join_at
from company c
  left join emps e1 on e1.company_id = c.id and e1.rn = 1
  left join emps e2 on e2.company_id = c.id and e2.rn = 2;

但是,這不會非常有效。 效率稍高的版本將使用條件聚合:

with emps as (
  select id, name, company_id, 
         row_number() over (partition by company_id order by join_date) as rn
  from employee
)
select c.id, c.name as company_name, 
       max(e.join_date) filter (where rn = 1) as first_employee_join_at, 
       max(e.join_date) filter (where rn = 2) as second_employee_join_at
from company c
  join emps e on e.company_id = c.id and e.rn in (1,2)
group by c.id, c.name;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM