Как получить информацию из 2 разных таблиц в Stack Overflow

Я пытаюсь написать запрос для моего приложения спортивного выбора. Я хочу отобразить всю информацию из одной таблицы, а также 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;

2

Решение

Отправленный вами 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 Таблица.

2

Другие решения

Посмотрите, хотите ли вы этого:

SELECT `weekly_stats.*`, SUM(`team.wins`), SUM(`team.losses`)
FROM `weekly_stats`
INNER JOIN `team`
ON `team.name` = `weekly_stats.team`

Если я вас неправильно понял, мне очень жаль.

0

По вопросам рекламы [email protected]