2

DBにこのテーブルがあります:

「ユーザー」

id  email                      name             last_access
1   user1@gmail.com     Name1 Surname1      2012-10-05 13:58:19.0
2   user2@gmail.com     Name2 Surname2      2012-10-05 13:56:59.0
3   user3@gmail.com     Name3 Surname3      2012-10-05 13:57:57.0

"NETS_PERMISSIONS"

user_id     network_id     perm
1           1234           3
2           1235           3

今、私はこのクエリを持っています:

SELECT DISTINCT user.id, user.name, nets.network_id, nets.perm
FROM users as user LEFT OUTER JOIN nets_permissions AS nets
ON user.id = nets.user_id AND nets.perm <> 3 WHERE user.id!=1 AND nets.network_id=1234

結果のクエリは空ですが、代わりにそれが必要です-「nets_permissions」テーブルから、クエリで指定されたようにperm = 3およびuser_idとnetwork_idの行が除外されます(この場合、user_id = 1およびnetwork_id = 1234の場合) ): この場合、クエリの左側の部分は空です。-「users」テーブルからすべての行を取得したいのですが、「nets_permissions」テーブルにない場合、行には network_id と perm があります。

したがって、この 2 つのテーブルから、この例では、次の結果になります。

id    name             network_id    perm
2     Irene Pippo      <null>        <null>
3     Luca Niccolini   <null>        <null>

皆様には大変お世話になりました。

4

2 に答える 2

4

これにより、必要なものが得られるはずです-perm 3とnework_id 1234を持っていないユーザーのみ

SELECT u.id, u.name, n.network_id, n.perm
  FROM users as u 
  LEFT JOIN nets_permissions as n
    ON u.id = n.user_id AND n.perm = 3 AND n.network_id=1234 
 WHERE n.network_id IS NULL
于 2012-10-05T14:31:40.280 に答える
1

私は次のように書きます(うまくいくはずです):

SELECT DISTINCT u.id, u.name, n.network_id, n.perm
FROM users as u 
LEFT OUTER JOIN nets_permissions as n ON u.id = n.user_id 
WHERE (n.perm is NULL || n.perm <> 3) AND u.id <> 1 AND n.network_id = 1234
于 2012-10-05T14:35:26.083 に答える