#mysql #inner-join
#mysql #внутреннее объединение
Вопрос:
Я застрял, пытаясь объединить выходные данные из 3 таблиц в один запрос.
Вот структура таблицы
BL_PLAYERS
идентификатор игрока int(10),
идентификатор лиги int(10),
переменная имени игрока (150),
пол tinyint(3),
начальный номер smallint(6),
итоговый результат (10),
total_games smallint(6),
текущий номер smallint (6),
league_player tinyint(3)
BL_POINTS
series_id int(10) player_id int(10) point smallint(6)
BL_LEAGUES_RANK
series_id int(10) player_id int(10) ранг smallint(6)
последняя игра smallint(6) результат true_score smallint(6) гандикап smallint(6)
общий результат smallint(6)
Вот мои 2 инструкции внутреннего соединения.. они выглядят почти идентично … но я не могу найти способ объединить их так, чтобы первый sql возвращал дополнительный столбец, который является суммой (rn.total_score) из BL_LEAGUES_RANK
SELECT pl.player_id, pl.player_name, pl.gender, pl.league_player, SUM( pt.point ) AS total_points FROM `bl_players` pl INNER JOIN `bl_points` pt ON pl.player_id = pt.player_id AND series_id =1 GROUP BY player_id ORDER BY total_points DESC
SELECT pl.player_id, pl.player_name, pl.gender, pl.league_player, SUM(rn.total_score) as total_pinfall FROM `bl_players` pl INNER JOIN `bl_leagues_rank` rn ON pl.player_id = rn.player_id AND series_id =1 GROUP BY player_id ORDER BY total_pinfall DESC
Возможно ли это вообще? Заранее благодарю вас за любой вклад в это…
Ответ №1:
Я думаю, это должно сработать….
SELECT pl.player_id, pl.player_name, pl.gender,
pl.league_player, SUM( pt.point ) AS total_points
FROM bl_players pl, bl_points pt, bl_leagues_rank rn
WHERE pl.player_id = pt.player_id AND series_id =1
AND pl.player_id = rn.player_id
GROUP BY player_id ORDER BY total_points DESC
Комментарии:
1. я пробовал это, но число, создаваемое mysql, намного превышает то, что должно быть … нашел способ, объединив внутреннее соединение и левое соединение. Итак, мой окончательный запрос будет выглядеть следующим образом… ВЫБЕРИТЕ pl.player_id, pl.player_name, pl.gender, pl.league_player, sum (pt.point ) В КАЧЕСТВЕ total_points, sum (rn.total_score) в качестве total_pinfall Из bl_players. pl ВНУТРЕННЕЕ ОБЪЕДИНЕНИЕ bl_points pt На pl.player_id = pt.player_id И pt.series_id = 1 ЛЕВОЕ ОБЪЕДИНЕНИЕ bl_leagues_rank rn НА pl.player_id = rn.player_id И rn.series_id. series_id = 1 ГРУППА ПО идентификатору игрока ПОРЯДОК По total_points Для меня немного сложный .. но это работает..