0

我正在建立一个 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
4

1 回答 1

3

您需要将条件移动到ON子句中:

SELECT menus.menuid, userid 
FROM menus
LEFT JOIN user_menu_access 
    ON menus.MenuID = user_menu_access.MenuID 
    AND UserID = 1

在此处查看此查询的执行情况(准确给出您要求的结果)。

这样做的原因是该WHERE子句在连接发生过滤行集,但是因为您正在执行 a ,所以表的列全部用于没有任何用户访问权限的菜单,因此您的条件不正确对于那些行。left joinuser_menu_accessnull

于 2012-07-04T18:40:11.570 回答