如何从PHP中的两个不同的表中获取信息

时间:2014-11-20 22:46:35

标签: php sql database postgresql subquery

我正在尝试为我的运动选择应用程序编写查询。我想显示一个表中的所有信息,以及另一个表中的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 个答案:

答案 0 :(得分:2)

您发布的SQL正在尝试使用不存在的字段weekly_stats.team。这些团队位于weekly_stats.homeweekly_stats.away,因为您有两个,所以需要两个连接。

要两次加入同一个表,你需要给它一个别名。这是通过在联接中的表的实际名称之后添加team1team2来完成的:

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`

如果我误解了你,我真的很抱歉。