Новый столбец для каждого подмножества - PullRequest
0 голосов
/ 14 декабря 2018

В этом примере я хочу вызвать все строки таблицы.Однако содержимое таблицы можно снова найти в подмножествах.Посмотрите:

У меня есть небольшая база данных футболистов, которая построена так:

Игрок: [PID, Имя, Номер]

Вратарь: [PID]

Защитник: [PID, Side]

Полузащитник: [PID, Specialty]

Атакующий: [PID, StrongFoot]

Так что я пытаюсь сделать этовместо того, чтобы иметь один столбец для player.name, я хочу, чтобы имена вратарей, защитников, полузащитников и нападающих находились в отдельных столбцах.Для начала я попытался:

select distinct gk.name, def.name 
from (select p.name
from player p, goalkeeper g 
where p.pid = g.pid) gk, (select p.name
from player p, defender d 
where p.pid = d.pid) def

Но это дает мне несколько результатов (в лучшем случае).Таким образом, каждая запись, скажем, для вратаря повторяется так же часто, как и общее количество def.name.

Что было бы приемлемым / ХОРОШИМ способом сделать это?

РЕДАКТИРОВАТЬ:

Итак, чтобы изложить мою проблему:

Скажем, у меня есть 2 вратарей в моей базе данных {"GK1", "GK2"} и 6 защитников {"D1 "," D2 "," D3 "," D4 "," D5 "," D6 "}.Если я выполню запрос выше, я получу два столбца, но вместо 2 и 6 записей соответственно я получу 12 для каждого.В голкипере каждый ID повторяется 6 раз, в столбце Defender каждая запись повторяется 2 раза.Есть ли способ просто отображать различные значения (поэтому упоминание каждого идентификатора только один раз) в каждом столбце и устанавливать другое значение NULL?

1 Ответ

0 голосов
/ 14 декабря 2018

Я думаю, что вы хотите четыре отдельных столбца с игроками, а не один столбец игрока.Вы можете сделать это, используя четыре "левых внешних соединения", например:

select
  p.pid,
  case when g.pid is not null then p.name end as goalkeeper,
  case when d.pid is not null then p.name end as defender,
  case when m.pid is not null then p.name end as midfielder,
  case when a.pid is not null then p.name end as attacker
from player p
left join goalkeeper g on g.pid = p.pid
left join defender d on d.pid = p.pid
left join midfieldfer m on m.pid = p.pid
left join attacker a on a.pid = p.pid
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...