sql - 连接 3 个表 - 如何连接

标签 sql mysql

这是我当前的查询 - 它没有得到所需的结果。我希望它显示所有“资源”,即使它们没有连接。

SELECT *
FROM (`user_permissions`)
JOIN `user_groups` ON `user_groups`.`id` = `user_permissions`.`role`
JOIN `user_resources` ON `user_resources`.`id` = `user_permissions`.`resource`
WHERE `role` = '4'

当我尝试左连接或右连接时,它仍然返回相同的结果。我得到的结果是:

id   | role  | resource | name

5    | 4     |        2 | Changelog 

我要

id   | role  | resource | name

5    | 4    |   2 | Changelog 
null | null | null | Resource2 
null | null | null | Resource3

这可能吗?

最佳答案

查看您的查询,roleuser_permissions 的一部分,它是可能存在也可能不存在的连接之一。如果您还想显示这些空记录,请考虑将您的 where 子句更改为 WHERE `role`= '4' OR `role` IS NULL...

另外,虽然这可以通过右连接来完成,但我相信如果您从 user_resources 中选择,然后在其他表上左连接,它会更具可读性/可理解性。这是根据您的问题描述陈述得出的;您想要“显示所有‘资源’,即使它们没有连接”,这意味着您想要从资源中进行选择,然后加入任何存在的连接。

关于sql - 连接 3 个表 - 如何连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3042652/

相关文章:

sql - 合并 2 个查询的结果,其中连接列可能在任一表中缺少数据

MySQL 从多个表中删除

php - Vimeo api 按上传日期或标题获取视频?

PHP 多单选按钮数组

sql - 比较同一张表的不同订单

c# - 我如何在 NHibernate 中执行反向 LIKE 查询?

mysql - 总结用户小时数并得到平均值,包括尚未添加任何小时数的用户

mysql - 如何在 Rails 3 中备份和恢复 mysql 数据库

mysql - 关于在存储过程中验证 mysql 中的电子邮件地址

成功存储在数据库中时的php错误消息