如何从一个表中返回一行,该行的编号为匹配的id';来自MySQL中的第二个表?

如何从一个表中返回一行,该行的编号为匹配的id';来自MySQL中的第二个表?,mysql,sql,database,Mysql,Sql,Database,我有两张桌子,一张是讨论桌,一张是回答桌。我想知道如何从带有匹配讨论ID的responses表中提取每个讨论行以及行数 表讨论 id creator 日期 标题 表响应 id creator 日期 discussion\u id=这是discussion中的id 因此,我希望能够获得每一行的讨论以及所有响应行的计数() 这大概是我所知道的: SELECT d.id, d.creator, d.date, d.title, (select count

我有两张桌子,一张是讨论桌,一张是回答桌。我想知道如何从带有匹配讨论ID的responses表中提取每个讨论行以及行数

讨论
  • id
  • creator
  • 日期
  • 标题
响应
  • id
  • creator
  • 日期
  • discussion\u id
    =这是
    discussion
    中的
    id
因此,我希望能够获得每一行的讨论以及所有
响应
行的计数()

这大概是我所知道的:

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,
    (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

正如Crwydrin所指出的,您还可以使用
左连接
而不是
内部连接
。不同之处在于,您还可以使用
左连接计算无响应的讨论
num
列将为
0
,请检查以下查询

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 

我建议使用左连接。标准联接将只返回具有相关响应条目的讨论,因此如果响应计数为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

为什么不使用听起来很有希望的分组功能呢,我甚至不知道它的存在。谢谢,我会查出来的啊,效果很好!非常感谢。我使用这个查询创建了一个视图,这将使事情变得更简单。这个解决方案是一个相关子查询。它们在大型数据集上表现不佳。坚持加入。啊,我明白了。谢谢你的帮助和提示!
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