繁体   English   中英

如何从一个表中返回一行,其中包含MySQL中第二个表中匹配id的数量?

[英]How do I return a row from one table with the number of matching id's from a second table in MySQL?

我有两个表,一个讨论和一个答复。 我想知道如何使用匹配的讨论ID来回退每个讨论行以及响应表中的行数。

表格discussions

  • id
  • creator
  • date
  • title

表格responses

  • id
  • creator
  • date
  • discussion_id =这是iddiscussions

因此,我希望能够获得每一行讨论以及所有具有其discussion_idresponses行的COUNT()

这是我所得到的:

SELECT
    d.id,
    d.creator,
    d.date,
    d.title,
    (select count(select * from r where r.discussion_id = d.id) from r) num
FROM 
    discussions d, responses r

我在这里走在正确的轨道上吗?

谢谢你的时间!

SELECT d.id, d.creator, d.date, d.title, COUNT(r.id) AS num 
FROM discussions AS d 
  INNER JOIN responses AS r ON r.discussion_id = d.id
GROUP BY d.id

正如Crwydryn所指出的,您也可以使用LEFT JOIN而不是INNER JOIN 不同之处在于您还可以在没有与LEFT JOIN共振的情况下计算讨论 - num列将为0

你很亲密 尝试:

SELECT
    d.id,
    d.creator,
    d.date,
    d.title,
    (select count(*) from r where r.discussion_id = d.id) num
FROM 
    discussions d

尝试这样......只需使用分组......它会给你想要的东西

 SELECT
        d.id,
        d.creator,
        d.date,
        d.title,
       (Select Count(*) from response where response.id= d.id) as num
    FROM 
        discussions d

请检查以下查询

SELECT
    d.id,
    d.creator,
    d.date,
    d.title,
   count(r.id)  NUM
FROM 
dicussion d join response r on d.id = r.discussion_id  
GROUP BY d.id 

我建议使用LEFT JOIN。 标准连接将仅返回具有相关响应条目的讨论,因此如果响应计数为0(即,该讨论没有响应),则具有标准连接的查询将不返回该讨论记录。 此外,这比子查询更高效。

select d.id,
    d.creator,
    d.date,
    d.title,
    count(r.id) as num
FROM discussions d 
    LEFT JOIN responses r on d.id = r.discussion_id
GROUP BY d.id

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM