2014-11-17 2 views
1

Я работаю над базой данных, созданной для спортивных игр.Условный выбор значений полей

Я одну таблицу под названием игра:

----------------------------- 
winner | team_id1 | team_id2 
----------------------------- 

У меня есть таблица команды

---------- 
id | title 
---------- 

если winner = 1, team_id1 является id команды победителя

если winner = 2, team_id2 - id команды победителя

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

Он пытался что-то вроде:

select tea1.title, tea2.title 
from games gam 
join teams tea1 on case 
when gam.winner = 1 and gam.team1_id = tea1.id then 1 
when gam.winner = 2 and gam.team2_id = tea1.id then 1 
else 0 
end = 1 
join teams tea2 on case 
when gam.winner = 2 and gam.team1_id = tea2.id then 1 
when gam.winner = 1 and gam.team2_id = tea2.id then 1 
else 0 
end = 1 

но запрос виснет, я не понимаю, почему.

ответ

2

Попробуйте получить титул победителя или проигравшего в предложении select вместо условий соединения.

select 
    gam.winner, 
    case when gam.winner=1 then t1.title else t2.title end as winner_title, 
    case when gam.winner=2 then t1.title else t2.title end as loser_title 
from 
    games gam 
left join 
    teams t1 
on 
    gam.team1_id = t1.id 
left join 
    teams t2 
on 
    gam.team2_id = t2.id