2012-08-09 83 views
0

假設我有一個名爲contacts的MySQL表。它看起來是這樣的:MySQL在多對多關係中選擇數據(我認爲)

+----------+ 
|contacts | 
+----------+ 
|id: int | 
|name: vc | 
|rank: int | 
+----------+ 

的「等級」是一個外鍵映射到表稱爲行列,看起來是這樣的:

+--------+ 
|ranks | 
+--------+ 
|id: int | 
|name: vc| 
+--------+ 

我做了一個SQL查詢,看起來像這樣,在希望,我會得到每個用戶的等級,但只給了我一個等級匹配的第一個用戶:

SELECT c.id, c.name, c.rank, r.name as rank_name FROM contacts c 
INNER JOIN ranks r ON r.id=c.rank 

在我看來,這將是正確的SQL語句獲取列表聯繫th還包含他們各自的等級名稱。但是,我只能收到每個等級的聯繫人,並且它始終是第一個聯繫人(如果按contact.id排序)。

任何解決方案?也許我錯過了一件完全太簡單的事情。我不知道。

謝謝!

編輯

每要求,這裏有一些行:

Table: ranks 
id  name 
6  Primary 
7  Secondary 
10  Test 

Table: contacts 
id  name  rank 
1  Joe   6 
2  Jane  6 
3  Mike  7 
4  Adam  10 
5  Edna  7 

回答

0

您的查詢看起來不錯,但問題可能是您的數據。你可以驗證你的數據,向我們展示一些記錄嗎?

特別是問題可能是不是每個等級(或聯繫人)在另一個表中都有適當的數字。

0

您的SQL客戶端是否包含LIMIT 1,1?

通過使用INNER JOIN,您將只獲取兩個表中存在的行(即匹配)。如果要獲得無秩序聯繫,您可以使用LEFT JOIN。

+0

我已經用LIMIT 0,100完成了一個手動SQL查詢。這仍然不起作用。 – 2012-08-09 21:25:40

0

這不是一個多對多的關係,因爲您只將1個等級映射到0個或多個聯繫人。

完全像這樣的查詢應該有效。您能否向我們提供更多的數據,如確切查詢中的內容以及表中的數據?

編輯: 數據看起來不錯。您是否正在使用

GROUP BY rank.id 

在您的確切查詢?

+0

不,我在聲明中使用了精確查詢。它給了我Joe,Mike和Adam作爲我的結果集。整個混亂讓我感到非常困惑。 – 2012-08-09 21:28:53

+0

我無法在這裏重現您的問題。你做什麼時得到: SELECT c.id,c.name,c.rank,c.rank FROM contacts c – RpgNick 2012-08-09 21:37:27