/ / 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

Тут підзапит повертає дублікати значень, і ми не можемо використовувати відмінний з оператором case. Щоб уникнути дублювання значень і отримати внутрішнє з'єднання імені батьківської команди з підзапитом, потрібно


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"

Ви можете використовувати НАЗАЄМНИЙ ВІД для свого запиту.

Потім я видалив пункт GROUP BY і замінив його DISTICNT.

Я просто використовую ідентифікатор CAST (t.id AS INT), щоб результат був упорядкований, і в будь-якому випадку ви можете просто видалити частину, яка відлита, єдина відмінність - це розташування результату.