嵌套 SQL 查询

Posted

技术标签:

【中文标题】嵌套 SQL 查询【英文标题】:Nested SQL Query 【发布时间】:2010-10-03 15:17:55 【问题描述】:

我有以下表格:

俱乐部:Club_ID |标题 |创建日期 | ...

Club_Intesect:用户 ID |俱乐部_ID |访问

我正在尝试选择数量不定的俱乐部,并加入该俱乐部中具有最高访问权限的用户的 ID。此人被视为所有者。

因此,如果 Club 100 的成员 A、B、C 分别具有访问权限 3、4 和 5:我希望最终查询从俱乐部中进行选择:

 Club.Club_ID     Club.Title        Club.Created_Date  Club_Intersect.User_ID

      100         |  "Test Club"   |  "Creation Date"     |       C             |
      101         | "Test Club 2"  |  "Creation_Date"     | Highest Access User |
      ...

【问题讨论】:

这里有很多混乱。您的结果使用Club.DateClub_Intersect.Owner_ID,它们都不存在于您的表中。您要求“最高”访问权限,但在示例输出中选择最低 (3 您的示例表列与查询结果列不匹配。 'Club.Date' 和 'Club_Intersect.Owner_ID' 均未定义。 对不起,你说的都对,我粗心了。现在应该更有意义了。 可以假设只有一个用户拥有最大访问权限吗? 【参考方案1】:
SELECT * FROM Club c
JOIN Club_Intesect ci ON ci.Club_ID = c.Club_ID
WHERE ci.Access = (SELECT MAX(Access) FROM Club_Intesect WHERE Club_ID = c.Club_ID)

未经测试,但你明白了

【讨论】:

由于所需的结果是 3,而不是 5,因此您可能需要 MIN 而不是 MAX。 ...我认为期望的结果是最大访问权限 (5)。 其实是5,抱歉原来的错别字。 没关系,编辑了很多,我也有点糊涂了【参考方案2】:
SELECT * FROM Club WHERE CLUB_ID = (SELECT Club_ID FROM Club_Intersect ORDER BY Access DESC LIMIT 1);

我认为这适用于使用嵌套 SQL 查询来选择您想要的俱乐部。您没有在返回的结果中指定您想要的内容,因为此查询只会检索 Club 列。

【讨论】:

以上是关于嵌套 SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章

SQL语句 - 嵌套查询

SQL语句 - 嵌套查询

SQL 查询 嵌套 FROM HAVING

Mybatis 的嵌套查询与嵌套结果的区别

Mybatis 的嵌套查询与嵌套结果的区别

sql语句 嵌套查询 排序