2010-01-05 76 views
28

我有两个表Activity和Action。一项活动可以执行一项或多项行动。 Activity和Action之间的关系在第三个表中给出,称为Activity Action。根据第三个表中定义的关系加入两个表

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

活动表 -ActivityId(PK),ActivityText

动作表 - ActionId(PK),ActionText

ActivityAction -ActivityActionId(PK),ActivityID,ActionID

我想要一个格式结果表

活动,适用行动

(活动栏应该显示ActivityText和适用的行动应该显示ActionText)

请您指导我?

谢谢。

+0

http://en.wikipedia.org/wiki/Join_%28SQL%29 – 2010-01-05 20:48:58

回答

41

这应该做的伎俩

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

基本上我们这里什么是许多人的活动和行动之间的多对多关系由两个使用一个连接表称为ActivityAction一个一对多的关系解决。

获得所需要的数据的时候,我们使用的是合适的PK和FK列加入ActivityAction到表中的每一个,然后在SELECT

2
SELECT ActivityText, ActionText 
FROM Activity 
JOIN ActivityAction ON Activity.ActivityId = ActivityAction.ActivityId 
JOIN Action ON ActivityAction.ActionId = Action.ActionId 
WHERE Activity.ActivityId = 1; 
0
SELECT ActivityText AS Activity, ActionText AS ApplicableAction 
    FROM Activity 
    JOIN ActivityAction on Activity.ActivityId = ActivityAction.ActivityID 
    JOIN Action on Action.ActionId = ActivityAction.ActionID 

选择字符串列你的ID在Action表中,当您将ActivityAction连接到ActivityId键时,则可以加入活动表