mysql:查询来自2个表的组合信息

mysql:查询来自2个表的组合信息,mysql,Mysql,假设以下配置: 表1“通用”字段:id和名称 表2带有字段的“信息”:userId(和其他一些) 当有信息要存储时,将有记录添加到信息表中。我可以很容易地获得每个用户记录数量的良好概述,如: mysql> SELECT userId ,COUNT(*) as nbr_entries FROM info GROUP BY userId ORDER BY nbr_entries DESC; +-----------+-------------+ | userId | nbr_entrie

假设以下配置:

  • 表1“通用”字段:id和名称
  • 表2带有字段的“信息”:userId(和其他一些)
  • 当有信息要存储时,将有记录添加到信息表中。我可以很容易地获得每个用户记录数量的良好概述,如:

    mysql> SELECT userId ,COUNT(*) as nbr_entries FROM info GROUP BY userId ORDER BY nbr_entries DESC;
    +-----------+-------------+
    | userId    | nbr_entries |
    +-----------+-------------+
    | 3987      |        2254 |
    | 11220     |        1922 |
    ...
    
    现在,我的问题是:我希望在表1(通用)中查找每个用户ID,以便我的查询结果如下:

    +-----------+-----------+-------------+
    | name      | userId    | nbr_entries |
    +-----------+-----------+-------------+
    | Peter     | 3987      |        2254 |
    | Walter    | 11220     |        1922 |
    ...
    
    你知道如何做到这一点吗?
    提前感谢。

    您可以使用
    加入

    SELECT b.name,userid,COUNT(*) as nbr_entries FROM info a
    inner join generic b on a.userid=b.id
    GROUP BY b.name,userId 
    ORDER BY nbr_entries DESC;
    
    SELECT t1.name, t2.userId , t2.nbr_entries 
    FROM generic t1
    JOIN
    (SELECT userId ,COUNT(*) as nbr_entries FROM info GROUP BY userId) t2
    ON t1.userId = t2.userId ORDER BY t2.nbr_entries DESC;
    

    您可以使用
    子查询
    加入

    SELECT b.name,userid,COUNT(*) as nbr_entries FROM info a
    inner join generic b on a.userid=b.id
    GROUP BY b.name,userId 
    ORDER BY nbr_entries DESC;
    
    SELECT t1.name, t2.userId , t2.nbr_entries 
    FROM generic t1
    JOIN
    (SELECT userId ,COUNT(*) as nbr_entries FROM info GROUP BY userId) t2
    ON t1.userId = t2.userId ORDER BY t2.nbr_entries DESC;
    
    使用左连接:

    SELECT g.name, g.id as userId, COUNT(i.userId) as nbr_entries
    FROM generic g
    LEFT JOIN info i ON i.userId = g.id
    GROUP BY g.id
    ORDER BY nbr_entries DESC
    
    这样,您还将包括没有信息条目(尚未)的用户,并以
    nbr\u条目的形式获取
    0