我正在尝试为我的运动选择应用程序编写查询。我想显示一个表中的所有信息,以及另一个表中的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;
答案 0 :(得分: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
表。
答案 1 :(得分:0)
看看这是不是你想要的:
SELECT `weekly_stats.*`, SUM(`team.wins`), SUM(`team.losses`)
FROM `weekly_stats`
INNER JOIN `team`
ON `team.name` = `weekly_stats.team`
如果我误解了你,我真的很抱歉。