在mySQL数据库中有一个名为clients
的表。每个客户行都有一列client_num
。要列出所有客户,我只需使用此声明。
SELECT * FROM clients
现在每个客户端可能有或可能没有一些subclients
,这些数字列在名为subclients
的单独表中,并通过表中的外键client_num
引用。
要了解客户端可能拥有多少个子客户端,我可以在单独的调用中查询子客户端表,如下所示:假设我们有一个客户端client_num
254。
SELECT count(1) FROM subclients WEHRE sublicents.client_num = 254
因此查询返回类似0,1,2,3,n
的内容在JOIN
我认为我必须做这样的事情:
SELECT
c.*,
sc.?????
FROM clients AS c
LEFT JOIN subclients AS sc ON sc.client_num = 254
但是我不知道如何在JOIN中加入count()语句来表示子客户端的数量。另外我不知道LEFT JOIN是否正确。
感谢任何帮助
编辑:
我必须补充一点,我希望从客户端返回all
行。附加的返回列COUNT(sc.client_num)
比子客户端的数量多。在下面的答案2中,我只获得返回的具有子客户端的客户端。 do not
个子客户端的客户端已not
返回。如何解决?
答案 0 :(得分:0)
我从Stack Overflow上的类似查询中读到的解决方案是使用子选择。如果您加入的唯一目的是To
,我会建议您不需要加入。那样:
Count
然后对于一行客户端,他们将有一个列SELECT clients.*, (SELECT COUNT(*) FROM subclients
WHERE subclients.client_num = clients.id ) AS numb FROM clients WHERE ....
,该列将是该客户端拥有的子客户端数。
A reference。
答案 1 :(得分:0)
您可以使用以下查询来获取每个客户端的所有子客户端的计数:
SELECT
c.*,
COUNT(sc.client_num)
FROM clients AS c
LEFT JOIN subclients AS sc ON sc.client_num = c.client_num
WHERE c.client_num = 254
GROUP BY sc.client_sum
使用子选择的解决方案:
SELECT *, (SELECT COUNT(*) FROM subclients WHERE client_num = clients.client_num)
FROM clients
WHERE client_num = 254