2

我的数据库中有这些表:

“用户”

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 ):在这种情况下,查询的左侧部分为空。- 我想从“用户”表中获取每一行,但如果它不在“nets_permissions”表中,则这些行有 network_id 和 perm 。

所以,从这两个表中,在这个例子中,我会得到这个结果:

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 回答