首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MYSQL JOIN语法如何连接三个表

问MYSQL JOIN语法如何连接三个表
EN

Stack Overflow用户
提问于 2012-09-05 22:44:08
回答 2查看 2.4K关注 0票数 1

下面的查询完成了我想要的操作。它返回users表中的所有结果,如果details表中存在匹配项,则返回相关数据

用户

代码语言:javascript
复制
id|username

详细信息

代码语言:javascript
复制
id|userid|firstname|lastname


$sql = "SELECT u.*, d.*
FROM `users` u
LEFT JOIN `details` d on
u.id = d.userid
ORDER BY $strorder";

但是,当我尝试连接一个附加表时,我想做同样的事情--返回users表的所有结果,如果第三个表中有匹配,则返回相关数据(该用户的总关注者)--它只返回一条记录。

第三表

关注

代码语言:javascript
复制
id|followerid|followedid

$sql = "SELECT u.*, d.*, COUNT(f.id)
FROM `users` u
LEFT JOIN `details` d on
u.id = d.userid
LEFT JOIN `follow` f on
u.id = f.followedid
ORDER BY $strorder";

有没有人看到我做错了什么?提前感谢您的任何建议。

非常感谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-05 22:50:02

尽量避免*选择字段,这样会更清楚地对数据进行分组(即使mysql对分组是非常允许的)。

当您有一个聚合函数(如COUNT、SUM)时,其他“非聚合”请求字段应该在GROUP BY子句中。

Mysql不会强制您按所有字段进行分组,但是...我认为这是一个很好的习惯,“尽可能的ANSI”(当你使用另一个DBMS时很有用)

代码语言:javascript
复制
SELECT u.id, u.username, d.firstname, d.lastname, count(*) as numberfollowers
FROM user u
LEFT JOIN details d on u.id = d.userid
LEFT JOIN follow f on u.id = f.followedid
GROUP BY u.id, u.username, d.firstname, d.lastname --or just GROUP BY u.id with Mysql
ORDER BY count(*) desc
票数 2
EN

Stack Overflow用户

发布于 2012-09-05 22:50:13

COUNT是一个聚合函数,当与其他列一起选择时,要求您按选择列表中的其他列对结果进行分组。

您应该使用要从users和details中选择的列重写查询,并按这些列分组。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12284045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档