Я пытаюсь написать запрос для моего приложения спортивного выбора. Я хочу отобразить всю информацию из одной таблицы, а также 2 столбца из другой таблицы. Я могу написать запрос, который выбирает всю информацию из одной таблицы, но мне трудно написать запрос, чтобы добавить 2 строки в мой ответ. Вот две таблицы, которые я использую. Это все в Postgresql, кстати.
Я хочу выбрать все из этой таблицы.
Table "public.weekly_stats"Column | Type | Modifiers
---------+-----------------------+--------------------
week_no | integer | not null
game_no | integer | not null
home | character varying(40) |
away | character varying(40) |
spread | double precision | not null default 0
winner | character varying(40) |
Indexes:
"weekly_stats_pkey" PRIMARY KEY, btree (week_no, game_no)
Foreign-key constraints:
"weekly_stats_away_fkey" FOREIGN KEY (away) REFERENCES team(name)
"weekly_stats_home_fkey" FOREIGN KEY (home) REFERENCES team(name)
И тогда я хочу отобразить победы и поражения для каждой команды. Это использует эту таблицу …
Table "public.team"Column | Type | Modifiers
--------+-----------------------+--------------------
name | character varying(40) | not null
wins | integer | not null default 0
losses | integer | not null default 0
Indexes:
"team_pkey" PRIMARY KEY, btree (name)
Referenced by:
TABLE "weekly_stats" CONSTRAINT "weekly_stats_away_fkey" FOREIGN KEY (away)
Я могу выбрать всю информацию из первой таблицы
Select week_no, game_no, home, wins, losses, away, wins, losses, spread, winner from weekly_stats inner join team on name.team = weekly_stats.team;
Отправленный вами SQL пытается использовать поле weekly_stats.team
который не существует Команды в weekly_stats.home
а также weekly_stats.away
и так как у вас есть два из них, вам нужно два соединения.
И чтобы присоединиться к одному и тому же столу дважды, нужно дать ему псевдоним. Здесь это делается путем добавления team1
или же team2
после фактического названия таблицы в объединениях:
Select
weekly_stats.week_no,
weekly_stats.game_no,
weekly_stats.home,
team1.wins,
team1.losses,
weekly_stats.away,
team2.wins,
team2.losses,
weekly_stats.spread,
weekly_stats.winner
from weekly_stats
inner join team team1 on team1.name = weekly_stats.home
inner join team team2 on team2.name = weekly_stats.away ;
Внутреннее соединение будет работать. Если есть вероятность, что таблица team
может пропустить команду, вы можете изменить ее на left join
который даст вам NULL
для выигрышей / проигрышей, когда данные отсутствуют в team
Таблица.
Посмотрите, хотите ли вы этого:
SELECT `weekly_stats.*`, SUM(`team.wins`), SUM(`team.losses`)
FROM `weekly_stats`
INNER JOIN `team`
ON `team.name` = `weekly_stats.team`
Если я вас неправильно понял, мне очень жаль.