MySQL以多对多关系选择数据(我认为)

时间:2012-08-09 21:13:17

标签: mysql

假设我有一个名为contacts的MySQL表。它看起来像这样:

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

'rank'是映射到名为rank的表的外键,如下所示:

+--------+
|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语句,以获取也包含其各自的等级名称的联系人列表。但是,我每个级别只返回一个联系人,它始终是第一个联系人(如果按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

3 个答案:

答案 0 :(得分:0)

您的查询看起来不错,但问题可能在于您的数据。您可以验证您的数据,向我们展示一些记录吗?

特别是问题可能是并非每个等级(或联系人)在另一个表中都有适当的数字。

答案 1 :(得分:0)

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

通过使用INNER JOIN,您将只获得两个表中存在的行(即匹配)如果您想获得无级联系,您可以使用LEFT JOIN。

答案 2 :(得分:0)

这不是多对多关系,因为您只将1个排名映射到0个或更多个联系人。

完全相同的查询应该有效。您能否向我们提供更多数据,例如确切查询中的内容以及表格中的数据?

修改: 数据看起来不错。你在用

吗?
GROUP BY rank.id

在您的确切查询中?