Mysql加入重复项

时间:2012-07-04 18:31:30

标签: mysql

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

1 个答案:

答案 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,因此这些行的条件不正确。