内部连接mysql

内部连接mysql,mysql,join,Mysql,Join,我有以下代码,用于获取订阅者的数量: SELECT provider_id,subcat_id, COUNT(user_id) AS subscribers FROM subscribers WHERE subcat_id=5 AND provider_id=provider_id GROUP BY provider_id ORDER BY subscribers DESC LIMIT 10 provider\u id是包含provider\u名称的provide

我有以下代码,用于获取订阅者的数量:

SELECT provider_id,subcat_id, COUNT(user_id) AS subscribers 
  FROM subscribers WHERE subcat_id=5 
    AND provider_id=provider_id 
  GROUP BY provider_id 
  ORDER BY subscribers DESC LIMIT 10 
provider\u id
是包含
provider\u名称的providers表的外键

如何获取获取provider_id的外键值并用表providers中的provider_名称替换它的结果?我尝试了内部连接,但没有成功。这可能是语法错误,因为我的select查询有点复杂

我现在得到的结果是:

+----------+---------+-----------+
|provder_id|subcat_id|subscribers|
+----------+---------+-----------+
|2         |5        |5          |
+----------+---------+-----------+
|4         |5        |3          |
+----------+---------+-----------+
|1         |5        |1          |
+----------+---------+-----------+
然而,我想要的是:

+----------+-------------+---------+-----------+
|provder_id|provider_name|subcat_id|subscribers|
+----------+-------------+---------+-----------+
|2         |Alex         |5        |5          |
+----------+-------------+---------+-----------+

选择subscribers.provider\u id、subscribers.subcat\u id、COUNT(user\u id)作为订阅服务器加入订阅服务器上的提供程序。provider\u id=providers.provider\u name,其中subscribers.subcat\u id=5和订阅服务器。provider\u id=subscribers.provider\u id按订阅服务器分组。provider\u id按订阅服务器顺序描述限制10

那不行

解决了这个问题


选择s.provider\u id、p.provider\u name、s.subcat\u id、COUNT(s.user\u id)作为订阅者从订阅者中加入订阅者p ON s.provider\u id=p.provider\u id其中s.subcat\u id=5和s.provider\u id=s.provider\u id按提供者分组\u id按订阅者排序DESC LIMIT 10

不太确定您的代码是什么,但您需要做的是。。。假设您有表A和表B。我猜提供者id是您的链接id

    Select TableA.provder_id,
    TableB.subcat_id,
    TableA.Name,
    Count(user_id) as subscribers)
    FROM TableA
    INNER JOIN TableB
    ON TableB.provder_id = TableA.provider_id
WHERE subcat_id = 5
GROUP BY TableA.Provider_id,
TableB.Provider_id,
TableA.Name

当您使用“计数”时,您需要在所有字段上按分组

不太确定您的代码是什么,但您需要做的是。。。假设您有表A和表B。我猜提供者id是您的链接id

    Select TableA.provder_id,
    TableB.subcat_id,
    TableA.Name,
    Count(user_id) as subscribers)
    FROM TableA
    INNER JOIN TableB
    ON TableB.provder_id = TableA.provider_id
WHERE subcat_id = 5
GROUP BY TableA.Provider_id,
TableB.Provider_id,
TableA.Name

当您使用“计数”时,您需要在所有字段上按分组

这将为您实现以下功能:

SELECT provider_id,provider.name, subcat_id, COUNT(user_id) AS subscribers 
FROM subscribers 
JOIN provider ON provider_id = provider.id
WHERE subcat_id=5 
GROUP BY provider_id 
ORDER BY subscribers DESC 
LIMIT 10 

这将为您带来好处:

SELECT provider_id,provider.name, subcat_id, COUNT(user_id) AS subscribers 
FROM subscribers 
JOIN provider ON provider_id = provider.id
WHERE subcat_id=5 
GROUP BY provider_id 
ORDER BY subscribers DESC 
LIMIT 10 
试试这个:

SELECT
  p.provider_id,
  provider.name,
  subcat_id,
  COUNT(user_id) AS subscribers 
FROM subscribers s
JOIN provider p ON p.provider_id = s.provider.id
WHERE subcat_id = 5
GROUP BY 1, 2, 3
ORDER BY 4 DESC 
LIMIT 10
注意使用:

  • 表别名,用于更清晰地区分常用列名
  • 列出所有非聚合列的group by(当前查询无法正常工作)
试试这个:

SELECT
  p.provider_id,
  provider.name,
  subcat_id,
  COUNT(user_id) AS subscribers 
FROM subscribers s
JOIN provider p ON p.provider_id = s.provider.id
WHERE subcat_id = 5
GROUP BY 1, 2, 3
ORDER BY 4 DESC 
LIMIT 10
注意使用:

  • 表别名,用于更清晰地区分常用列名
  • 列出所有非聚合列的group by(当前查询无法正常工作)

选择订阅者。提供者id,订阅者。子类别id,计数(用户id)由于订阅服务器的订阅服务器加入订阅服务器上的提供程序。提供程序\u id=提供程序。提供程序\u名称,其中订阅服务器。子类别\u id=5和订阅服务器。提供程序\u id=订阅服务器组。提供程序\u id按订阅服务器排序描述限制10这不会给出任何错误,但也不会产生任何结果(您的
提供者
表中是否有任何行?专门针对提供者id 2(Alex)?是的。提供者表包含有关提供者的信息。Alex存在于表中最好发布原始数据,或者更好地使用架构和数据创建一个链接,并在问题中发布链接选择订阅者。提供者id,订阅者。子类别id,计数。)(用户id)作为订阅者的订阅者加入订阅者上的提供程序。提供程序id=提供程序。提供程序名称订阅者所在的位置。subcat\u id=5和订阅者。提供程序id=订阅者。提供程序id按订阅者分组。提供程序id按订阅者排序描述限制10这不会给出任何错误,但也不会产生任何结果(您的
提供程序
表中是否有任何行?专门针对提供程序_id 2(Alex)?是的。提供程序表包含有关提供程序的信息。Alex存在于表中最好发布您的原始数据,或者更好地创建一个包含架构和数据的表,并发布问题中的链接。)