Объединение 2 запросов внутреннего соединения в один

#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 Для меня немного сложный .. но это работает..