0

私は急いで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
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に句が行セットをフィルター処理するためですが、 を実行しているため、テーブルの列はすべてユーザー アクセス権のないメニュー用であるため、条件は true ではありませんそれらの行のために。left joinuser_menu_accessnull

于 2012-07-04T18:40:11.570 に答える