Отображаемое имя столбца внешнего ключа вместо его идентификатора - PullRequest
0 голосов
/ 31 декабря 2018

У меня есть таблица соответствий, структура которой отображается здесь

enter image description here

в этой таблице у меня есть столбец teama, teamb, на который ссылаются столбцы внешнего ключадо team таблицы t_id.По сути, я хочу, чтобы, когда я выбираю все данные из этой таблицы, я хотел, чтобы они отображали значения в teama и teamb вместо их t_id.Структура таблицы команд приведена здесь

enter image description here

Запрос, который я пишу, приведен ниже:

select * 
from teams,matches 
where 
    matches.team_a=teams.t_id 
    and matches.team_b=teams.t_id;

Ответы [ 4 ]

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

Вы можете создать представление после присоединения, это сделало вашу работу простой для дальнейшего развития, я улучшил код mr.forbas следующим образом

CREATE VIEW team AS select 
m.m_id, 
t1.t_name as team_a, 
t2.t_name as team_b, 
m.m_time
 from 
matches m inner join teams as t1 on m.team_a=t1.t_id
inner join teams as t2 on m.team_b=t2.t_id
 order by m.m_id;
0 голосов
/ 31 декабря 2018

Во-первых, никогда не используйте запятые в предложении FROM.Всегда используйте правильный, явный синтаксис standard JOIN.На самом деле вам нужны два JOIN с:

select m.*, ta.t_name as name_a, tb.t_name as name_b 
from matches m left join
     teams ta
     on m.team_a = ta.t_id left join
     teams tb
     on m.team_b = tb.t_id;

При этом используется left join только для того, чтобы гарантировать, что вы получите все матчи, даже если одна из команд отсутствует.В этом случае это, вероятно, не является важным фактором, поэтому inner join будет эквивалентно.

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

Вы хотите два ВНУТРЕННИХ СОЕДИНЕНИЯ от матчей за столом до команд за столом, например:

SELECT
    ta.t_name,
    tb.t_name
FROM
    matches m
    INNER JOIN team as ta on ta.t_id = matches.team_a
    INNER JOIN team as tb on tb.t_id = matches.team_b
0 голосов
/ 31 декабря 2018

Вам необходимо объединить 2 столбца matches в таблицу teams:

select 
  m.m_id, 
  t1.t_name as team_a, 
  t2.t_name as team_b, 
  m.m_time
from 
  matches m inner join teams as t1 on m.team_a=t1.t_id
  inner join teams as t2 on m.team_b=t2.t_id
order by m.m_id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...