Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL连接3个表_Mysql_Join_Null - Fatal编程技术网

MySQL连接3个表

MySQL连接3个表,mysql,join,null,Mysql,Join,Null,我有3个表,我需要它们的组合才能看到所有列的组合(MySQL) 第一。表poi_ACL_权限 ID permKey permName |1 |access_site |Access Site |2 |access_admin |Access Admin System |3 |publish_articles |Publish Articles |4 |publish_events |Publish E

我有3个表,我需要它们的组合才能看到所有列的组合(MySQL)

第一。表poi_ACL_权限

 ID        permKey          permName
|1 |access_site           |Access Site
|2 |access_admin          |Access Admin System
|3 |publish_articles      |Publish Articles
|4 |publish_events        |Publish Events
|5 |install_modules       |Install Modules
|6 |post_comments         |Post Comments
|7 |access_premium_content|Access Premium Content
|8 |limited_admin         |Limited Admin
第二。表是poi_ACL_角色

 ID   roleName
| 1|Administrators
| 2|All Users
| 3|Authors
| 4|Premium Members
三,。表是poi\U ACL\U角色\U perms

  ID  roleID  permID  value     addDate
| 16|      1|      2|     1|2009-03-02 17:13:21
| 17|      1|      7|     1|2009-03-02 17:13:21
| 18|      1|      1|     1|2009-03-02 17:13:21
| 19|      1|      5|     1|2009-03-02 17:13:21
| 20|      1|      8|     1|2009-03-02 17:13:21
| 21|      1|      6|     1|2009-03-02 17:13:21
| 22|      1|      3|     1|2009-03-02 17:13:21
| 23|      1|      4|     1|2009-03-02 17:13:21
| 24|      2|      1|     1|2009-03-02 17:13:31
| 25|      3|      7|     1|2009-03-02 17:13:38
| 26|      3|      8|     1|2009-03-02 17:13:38
| 27|      3|      6|     1|2009-03-02 17:13:38
| 28|      3|      3|     1|2009-03-02 17:13:38
| 29|      3|      4|     1|2009-03-02 17:13:38
| 30|      4|      7|     1|2009-03-02 17:13:42
| 31|      4|      6|     1|2009-03-02 17:13:42
我有一个疑问:

SELECT [roleName], [roleID], [value], [permID] AS RPID, [permKey], [permName], [poi_ACL_permissions].[ID] AS PID
FROM [poi_ACL_permissions] 
LEFT OUTER JOIN [poi_ACL_role_perms] 
ON [poi_ACL_permissions].[ID] = [poi_ACL_role_perms].[permID]
LEFT OUTER JOIN [poi_ACL_roles] 
ON [poi_ACL_role_perms].[roleID] = [poi_ACL_roles].[ID]         
ORDER BY [roleID], [permID]  ASC 
事实上,这给了我所需要的。。。(几乎;))结果是包含所有角色及其权限的数组。但是,我需要的也是空权限

现在:

但是,例如,所有用户应:

0   All Users   2   1   1   access_site
1   All Users   2   0   2   access_admin
2   All Users   2   0   3   publish_articles
3   All Users   2   0   4   publish_events
4   All Users   2   0   5   install_modules
5   All Users   2   0   6   post_comments
6   All Users   2   0   7   access_premium_content
7   All Users   2   0   8   limited_admin
等等


您能帮我使用SQL吗?

在您的
角色
权限
表之间使用
交叉连接
,然后左键连接到
角色(权限
表:

SELECT 
  r.roleName, 
  r.ID AS roleID, 
  COALESCE(rp.value, 0) AS value, 
  p.ID AS permissionID,
  p.permKey, 
  p.permName 
FROM poi_ACL_permissions p
CROSS JOIN poi_ACL_roles r
LEFT OUTER JOIN poi_ACL_role_perms rp
  ON p.ID = rp.permID
  AND r.ID =  rp.roleID
ORDER BY r.ID, p.ID
另外,请注意表别名的使用(
r
p
rp
)有助于提高查询的可读性


是的,但我正试图在mysql中这样做(“不知何故”):)这被标记为mysql,但查询看起来像SQL Server不,它是mysql,但我正在使用Dibi(),有趣的是,我正要添加完全相同的答案(即使使用相同的别名):P我唯一使用的是
coalesce
@MostyMostacho是的,
coalesce
。。。如果可能,最好保持ANSI标准。
SELECT 
  r.roleName, 
  r.ID AS roleID, 
  COALESCE(rp.value, 0) AS value, 
  p.ID AS permissionID,
  p.permKey, 
  p.permName 
FROM poi_ACL_permissions p
CROSS JOIN poi_ACL_roles r
LEFT OUTER JOIN poi_ACL_role_perms rp
  ON p.ID = rp.permID
  AND r.ID =  rp.roleID
ORDER BY r.ID, p.ID