如何组合两个表,一个有1行,有一个有n行?

时间:2010-10-26 18:01:47

标签: sql

我有一个包含两个表的数据库

一个有游戏的人 和一个与参与者 游戏可以有更多的参与者,而这些参与者位于不同的表格中。

有没有办法将这两者合并为一个查询?

由于

2 个答案:

答案 0 :(得分:3)

您可以使用JOIN运算符组合它们。

这样的东西
SELECT *
FROM   games g
       INNER JOIN participants p ON p.gameid = g.gameid

关于JOIN运算符的说明

  

INNER JOIN - 匹配INNER中指定的两个表之间的行   基于一个或多个的JOIN语句   具有匹配数据的列。   优选地,连接基于   参照完整性强制执行   表之间的关系   确保数据完整性。             o只是为基本定义添加一些评论   以上,一般是INNER JOIN   选项被认为是最多的   应用程序中需要公共连接   和/或查询。虽然那是   在某些环境中,它是   真的依赖于数据库   设计,参考完整性和数据   申请所需。因此,   请花点时间了解一下   请求的数据然后选择   适当的加入选项。             o尽管大多数连接逻辑都基于匹配值   指定的两列,它是   也可以包括逻辑使用   大于,小于,不等于   等

     

LEFT OUTER JOIN - 基于连接中指定的两个表   子句,所有数据都从中返回   左桌。在右边的桌子上,   另外还返回匹配数据   到存在记录的NULL值   在左表中,但不在   右表。             o要记住的另一个项目是LEFT和RIGHT OUTER   JOIN逻辑彼此相反。   所以你可以改变顺序   特定连接中的表   声明或从左边更改JOIN   向右,反之亦然   相同的结果。

     

RIGHT OUTER JOIN - 基于连接中指定的两个表   子句,所有数据都从中返回   右表。在左边的桌子上,   另外还返回匹配数据   到存在记录的NULL值   在右边的桌子上但不在左边   表

     

Self -Join - 在这种情况下,同一张表是   两次指定两次不同   别名以匹配数据   在同一张桌子里。

     

CROSS JOIN - 基于join子句中指定的两个表,a   如果a,则创建笛卡尔积   WHERE子句会过滤行。   笛卡尔积的大小是   基于乘以数量   左数表中的行数   右表中的行数。请   使用CROSS JOIN时请注意谨慎。

     

FULL JOIN - 基于join子句中指定的两个表,   从两个表返回所有数据   无论匹配数据如何。

答案 1 :(得分:1)

例如

表游戏有列(gameName,gameID)
table Participant包含列(participantID,participantName,gameID)

GameID列是2个表之间的“链接”。你需要一个可以在两个表之间加入的公共列。

SELECT gameName, participantName
FROM Game g
JOIN Participat p ON g.gameID = p.gameID

这将返回所有游戏的数据集以及这些游戏的参与者。 游戏列表将是多余的,除非由于该游戏的多个参与者而以其他方式构建游戏。

示例数据

WOW        Bob
WOW        Jake
StarCraft2 Neal
Warcraft3  James
Warcraft3  Rich
Diablo     Chris