这是我当前的查询 - 它没有得到所需的结果。我希望它显示所有“资源”,即使它们没有连接。
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
这可能吗?
最佳答案
查看您的查询,role
是 user_permissions
的一部分,它是可能存在也可能不存在的连接之一。如果您还想显示这些空记录,请考虑将您的 where 子句更改为 WHERE `role`= '4' OR `role` IS NULL
...
另外,虽然这可以通过右连接来完成,但我相信如果您从 user_resources
中选择,然后在其他表上左连接,它会更具可读性/可理解性。这是根据您的问题描述陈述得出的;您想要“显示所有‘资源’,即使它们没有连接”,这意味着您想要从资源中进行选择,然后加入任何存在的连接。
关于sql - 连接 3 个表 - 如何连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3042652/