根据第三个表中定义的关系连接两个表

时间:2010-01-05 20:29:37

标签: sql join

我有两个表Activity和Action。可以为活动执行一个或多个动作。 Activity和Action之间的关系在名为Activity Action的第三个表中给出。

如何使用sql语句检索结果集,告诉我哪些操作适用于每个活动?这是表结构

活动表 -ActivityId(PK),ActivityText

操作表 - ActionId(PK),ActionText

ActivityAction -ActivityActionId(PK),ActivityID,ActionID

我想要一个格式为

的结果表

活动,适用的行动

(Activity列应显示ActivityText,Applicable Action应显示ActionText)

你可以指导我吗?

谢谢。

3 个答案:

答案 0 :(得分:49)

这应该可以解决问题

SELECT Activity.ActivityText as Activity, Action.ActionText as ApplicableAction
FROM ActivityAction
    INNER JOIN Activity
        ON ActivityAction.ActivityId = Activity.ActivityId
    INNER JOIN Action 
        ON ActivityAction.ActionId = Action.ActionId

您应该阅读数据库中的JOINS。这是一个很好的起点:

http://en.wikipedia.org/wiki/Join_%28SQL%29

基本上我们这里有一个Activity和Action之间的多对多关系,它通过两个一对多关系使用名为ActivityAction的连接表来解决。

为了获得所需的数据,我们使用适当的PK和FK列将ActivityAction连接到每个表,然后在SELECT中选择字符串列

答案 1 :(得分:3)

SELECT ActivityText, ActionText
FROM Activity
JOIN ActivityAction ON Activity.ActivityId = ActivityAction.ActivityId
JOIN Action ON ActivityAction.ActionId = Action.ActionId
WHERE Activity.ActivityId = 1;

答案 2 :(得分:0)

SELECT ActivityText AS Activity, ActionText AS ApplicableAction
  FROM Activity 
  JOIN ActivityAction on Activity.ActivityId = ActivityAction.ActivityID
  JOIN Action on Action.ActionId = ActivityAction.ActionID

您在Action表中有ID,当您在ActivityId键上连接表ActivityAction时,您就可以加入活动表