私はこれらのテーブルを持っています:
「ユーザー」
id email name last_access
1 luca@gmail.com Luca Pluto 2012-10-05 17:21:22.0
2 pippo@gmail.com Irene Pippo 2012-10-05 17:22:25.0
「Nets_permissions」
user_id network_id perm
1 1234 3
1 1235 1
2 1235 3
私はこのクエリを書きました:
SELECT u.id, u.name, n.perm
FROM users as u LEFT OUTER JOIN nets_permissions as n
ON u.id = n.user_id
WHERE n.network_id=1234 AND n.perm <> 3
network_id (1234) のアクセス許可を既に持っているユーザーだけでなく、network_id のアクセス許可を持っていないユーザーも必要だからです。つまり、次の結果クエリがあります。
2 null null
ネット1234のid = 1のユーザーLuca Plutoはperm = 3であるため、除外したい. 代わりに、id=2 のユーザー Irene Pippo には、1234 ネットに対する権限がありません。そのため、行には net_id と perm を null に設定する必要があります。
クエリ結果が空です。どうしてか分かりません。節 n.perm <> 3 がなければうまくいくようですが、perm=3 の rw だけでなく null 値も除外されます。
私もこの方法で試しました:
SELECT u.id, u.name, n.perm FROM users as u LEFT OUTER JOIN
(select * from nets_permissions WHERE network_id=1234) as n on u.id = n.user_id
WHERE n.perm <> 3
しかし、うまくいきません。WHERE 句がなくてもすべて機能します。いいえ。結果クエリは空です。
この問題を解決するにはどうすればよいですか? perm 列が値または null である必要があります。この列を削除できません。