带别名的复杂SQL查询

时间:2013-08-07 22:11:41

标签: mysql sql alias

我看到这个复杂的select语句有几个组件:别名和子查询

SELECT
    u.ID, u.username, u.active, u.email, u.admin, u.banned, u.name,
    (SELECT
        GROUP_CONCAT( g.name SEPARATOR'-groupsep-' ) FROM groups g,
        group_memberships gm
        WHERE g.ID = gm.group AND gm.user = u.ID
    ) AS groupmemberships
    FROM users u WHERE u.ID={$uid}

对我来说没有意义的部分是AS groupmemberships部分。

什么是别名? u.name后面的元素?

我不熟悉子查询语法。

任何有用的解释和官方文档的链接都会有所帮助。

3 个答案:

答案 0 :(得分:1)

此查询在查询的FROM子句中使用子查询。子查询返回一组行,而这些行又被查询的其余部分用作表。在MySQL中,必须为此“虚拟表”提供别名。

具体而言,名称groupmemberships是指

的结果集
   SELECT
       GROUP_CONCAT( g.name SEPARATOR'-groupsep-' )
   FROM
       groups g, group_memberships gm
   WHERE
       g.ID = gm.group
       AND gm.user = u.ID

更详细的解释可以在the MySQL documentation about subqueries in the FROM clause中找到。

答案 1 :(得分:1)

来自Mysql manual

  

子查询在SELECT语句的FROM子句中是合法的。实际语法是:

     

SELECT ... FROM(子查询)[AS]名称......

     

[AS] name子句是必需的,因为FROM子句中的每个表都必须具有名称。

所以基本上我可以给我的结果表一个名称,并在外部查询中将它作为表本身使用。

希望有所帮助:)

答案 2 :(得分:0)

它是子查询结果的列名。没什么好说的

Select V1,V2,(V1 + V2) As Total From SomeTableOfVs