我正在创建一个cms,我有一个叫做menus的表格。
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发布于 2012-07-05 02:40:12
您需要将条件移动到ON子句中:
SELECT menus.menuid, userid
FROM menus
LEFT JOIN user_menu_access
ON menus.MenuID = user_menu_access.MenuID
AND UserID = 1查看这个查询executing (给出了您所要求的结果) here。
这样做的原因是,WHERE子句在连接发生后过滤行集,但是因为您正在执行left join,所以对于没有任何用户访问权限的菜单,user_menu_access表的所有列都是null,所以您的条件对这些行不为真。
https://stackoverflow.com/questions/11333980
复制相似问题