如何从一个表中返回一行,该行的编号为匹配的id';来自MySQL中的第二个表?
我有两张桌子,一张是讨论桌,一张是回答桌。我想知道如何从带有匹配讨论ID的responses表中提取每个讨论行以及行数 表如何从一个表中返回一行,该行的编号为匹配的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
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