我正在建造一个cms, 我有一个名为菜单的表
Menus
MenuID | MenuName
1 Home
2 users
3 email
4 system
我有另一个表来控制用户对这些菜单的访问
call user_menu_access
MenuID | UserID
1 1
2 1
我正在做这样的左连接
SELECT *
FROM menus
LEFT JOIN user_menu_access
ON menus.MenuID = user_menu_access.MenuID
WHERE UserID = 1
我的结果集对行进行了公开,因为我必须为1和2引入行,我想要
结果集如下
MenuID | UserID
1 1
2 1
3 NULL
4 NULL
答案 0 :(得分:3)
您需要将条件移动到ON
子句:
SELECT menus.menuid, userid
FROM menus
LEFT JOIN user_menu_access
ON menus.MenuID = user_menu_access.MenuID
AND UserID = 1
查看此查询正在执行(确切地提供您要求的结果)here。
这样做的原因是{<1}}子句在连接发生后过滤行,但是因为你正在做{{1}对于没有任何用户访问权限的菜单,WHERE
表的列都是left join
,因此这些行的条件不正确。