假设我有一个名为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
答案 0 :(得分:0)
您的查询看起来不错,但问题可能在于您的数据。您可以验证您的数据,向我们展示一些记录吗?
特别是问题可能是并非每个等级(或联系人)在另一个表中都有适当的数字。
答案 1 :(得分:0)
您的SQL客户端是否包含LIMIT 1,1?
通过使用INNER JOIN,您将只获得两个表中存在的行(即匹配)如果您想获得无级联系,您可以使用LEFT JOIN。
答案 2 :(得分:0)
这不是多对多关系,因为您只将1个排名映射到0个或更多个联系人。
完全相同的查询应该有效。您能否向我们提供更多数据,例如确切查询中的内容以及表格中的数据?
修改强>: 数据看起来不错。你在用
吗?GROUP BY rank.id
在您的确切查询中?