/ / SQL - изписването на име на родителски екип зависи от екипа на детето най-малко от един служител - sql, postgresql

Показването на име на SQL-родителски екип зависи от екипа на детето най-малко от един служител - sql, postgresql

Имам 3 маси

отбори

   id  name
6   WD
7   LGO
10  PS
11  EM
12  SO
13  DM
14  DMS
15  CRO
16  T / T

team_mapping

   id      team_id      parent_team_id
1       6            0
2       7            0
3       10           7
4       11           7
5       12           0
6       13           12
7       14           12
8       15           0
9       16           15

служители

   id      name       team_id
3       Bk        6
4       Nr        6
5       SV        7
6       GK        10
7       JPD       13
8       BSY       16
9       MK        16
10      Ps        16
11      Bji       16

моята заявка е

SELECT t.*
FROM teams t
INNER JOIN employees e ON t.id = e.team_id
INNER JOIN team_mapping tm ON t.id = tm.team_id
WHERE tm.parent_team_id = "0"
GROUP BY t.id

тя се показва като

    id         name
6           WD
7           LGO

но искам да покажа името на родителския екип само ако най-малкото има един служител или в родителския, или в детския екип. т.е. продукция като

   team_id    name
6          WD
7          LGO
12         SO
15         CRO

Моля, помогнете ми да напиша заявка и изходът трябва да бъде показан като резултат по-горе

Благодаря

Отговори:

0 за отговор № 1
select distinct id, name
from teams t inner join
(SELECT case when tm.parent_team_id = 0 then tm.team_id else tm.parent_team_id end as TID
FROM teams t
INNER JOIN team_mapping tm ON t.id = tm.team_id
INNER JOIN  employees e ON tm.team_id = e.team_id  ) as table2
on t.id = table2.TID

Този код е в SQL Server

Тук подзапитването връща дублиращи се стойности и не можем да използваме разграничение с оператора на случая. За да се избегнат дублиращи се стойности и да се получи вътрешно присъединяване на името на родителския екип с подзапитване


0 за отговор № 2

ето как трябва да изглежда вашето запитване

SELECT DISTINCT CAST(t.id AS INT) id,t.name
FROM teams t
LEFT JOIN employees e ON t.id = e.team_id
LEFT JOIN team_mapping tm ON t.id = tm.team_id
WHERE tm.parent_team_id = "0"

Можете да използвате LEFT JOIN за вашата заявка.

Тогава премахнах клаузата GROUP BY и я замених с DISTICNT.

Просто използвам CAST (t.id AS INT) id, така че резултатът ще бъде подреден, така или иначе можете просто да премахнете актьорската част, като единствената разлика е подреждането на резултата.