2010-03-10 70 views
0

我有一个数据库中的两个表和一个链接表,我需要一个JOIN查询:多对多的关系用加入

这里是我的表:

家庭(用户ID(INT),登录名,等等)
成员(MEMBERID(INT),登录名(该链接成员家庭),姓名等)

链接表: user2member(用户ID,MEMBERID)......都希望能外键?

我想要做的两件事情:

1)能够有一个family.loginName(12,约翰逊)订阅另一个family.loginName(43,史密斯),并记录到链接表。

这将是这样的: 12,43

2)当我这样做对所有的member.name是在庄臣家族的查询,我会得到所有的约翰逊&所有的史密斯。

如果约翰逊=特德,苏&帕蒂 IF史密斯=乔,苏&鲍勃

我的查询结果会是约翰逊现在=特德,苏,侯佩岑,乔,苏,鲍勃

我问这个问题,前几天没有良好的表名和我结束了自己的困惑和好人奥利·琼斯谁张贴类似这样的查询答案:

SELECT member.name 
FROM family 
    JOIN user2member on family.userid = member.memberid 
    JOIN member on user2member.name = member.name 
 WHERE family.userid = '30' 
ORDER BY member.name 

我不得不改变奥利的ANS更适合我的牌桌,但是我在第5线获得极限误差0,30。

这是我第一次做JOINS,我不知道这是否正确。

感谢,

这里的链接到我的第一个问题:mySQL table linking , group linked to other members lists, the displaying all members

回答

1

我不知道,如果你建议的表将解决您的问题。如果我理解你的问题是正确的,有两个关系:

  • 所有家庭成员的关系(约翰逊与特德,苏,侯佩岑,史密斯与乔,苏,鲍勃)
  • 用于订阅的关系(家庭可以订阅到另一个家庭)

我建议如下表:

  • 家庭(F_ID,f_loginName等。)
  • 成员(M_ID,m_f_id,m_name)(外键的家庭,多到一的关系)
  • 订阅(s_f_id,s_to_f_id)(链接是基于两个家庭钥匙)

这会导致以下内容:

family: 
f_id f_loginName 
12  Johnson 
43  Smith 

member: 
m_id m_f_id m_name 
1  12  Ted 
2  12  Sue 
3  12  Patty 
4  43  Joe 
5  43  Sue 
6  43  Bob 

subscription 
s_f_id s_to_f_id 
12  43 

现在,把所有可能的成员,具体的家庭和它的订阅,我会用下面的SQL查询。它有一个简单的加入为家庭和它的家庭成员。在WHERE子句中,家庭约翰逊被抓取(f_id = 12)并且从订阅中获得所有家庭成员,使用子查询更容易。

SELECT f_loginName, m_name 
FROM family 
INNER JOIN member ON m_f_id = f_id 
WHERE f_id = 12 
     OR f_id IN (SELECT s_to_f_id FROM subscription WHERE s_f_id = 12) 
ORDER BY f_loginName, m_name; 
+0

谢谢,一定要把握。关于外键的问题。成员(m_f_id)是Family(f_id)的外键还是反之亦然?并且是对f_id和m_id的主键和外键的订阅? 非常感谢。 – 2010-03-11 00:07:08

+0

谢谢 - 我有这个困难,有一个外键,链接到f_id的m_f_id。 – 2010-03-11 03:18:59

+0

是的,m_f_id是f_id的外键,并将成员放入族中。在这种情况下,会员可以留在一个家庭中。是否有需要,一个成员可以在多个家庭中? 我在你的问题1)中没有真正理解的是:你想通过订购一个家族到另一个家族来解决什么问题? – Steve 2010-03-11 07:00:54