多对多的关系用加入
问题描述:
我有一个数据库中的两个表和一个链接表,我需要一个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
答
我不知道,如果你建议的表将解决您的问题。如果我理解你的问题是正确的,有两个关系:
- 所有家庭成员的关系(约翰逊与特德,苏,侯佩岑,史密斯与乔,苏,鲍勃)
- 用于订阅的关系(家庭可以订阅到另一个家庭)
我建议如下表:
- 家庭(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;
谢谢,一定要把握。关于外键的问题。成员(m_f_id)是Family(f_id)的外键还是反之亦然?并且是对f_id和m_id的主键和外键的订阅? 非常感谢。 – 2010-03-11 00:07:08
谢谢 - 我有这个困难,有一个外键,链接到f_id的m_f_id。 – 2010-03-11 03:18:59
是的,m_f_id是f_id的外键,并将成员放入族中。在这种情况下,会员可以留在一个家庭中。是否有需要,一个成员可以在多个家庭中? 我在你的问题1)中没有真正理解的是:你想通过订购一个家族到另一个家族来解决什么问题? – Steve 2010-03-11 07:00:54