2010-03-10 106 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