我有一个数据库有两个表和一个链接表,我需要一个JOIN查询:
以下是我的表格:
family(userid(int),loginName等)
member(memberid(int),loginName(这会将成员链接到一个系列),名称等)
链接表: user2member(userid,memberid)...都是外键吗?
我想做两件事:
1)能够将family.loginName(12,Johnson)订阅另一个family.loginName(43,Smith)并将其记录到链接表中。
看起来像这样: 12,43
2)当我查询Johnson家族中的所有member.name时,我会得到所有的Johnsons&所有的史密斯。
如果Johnson = Ted,Sue&帕蒂 IF Smith = Joe,Sue&鲍勃
我的查询结果将是Johnson现在= Ted,Sue,Patty,Joe,Sue,Bob
我几天前问过这个问题而没有好的表名,我最后让自己和好人Ollie Jones混淆了,他们在查询中发布了类似的答案:
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
我不得不改变Ollie的答案以匹配我的牌桌,但我在第5行得到限制误差0,30。
这是我第一次做JOINS,我不知道这是否正确。
谢谢,
以下是我的第一个问题的链接:mySQL table linking , group linked to other members lists, the displaying all members
答案 0 :(得分:1)
我不确定,如果您建议的表格可以解决您的问题。如果我理解你的问题是正确的,那么就有两种关系:
我建议遵循以下表格:
这将导致以下内容:
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子句中,获取家族Johnson(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;