【发布时间】:2018-08-25 13:53:36
【问题描述】:
我有用户和权限表。它们之间的关系是:
一个用户HAS MANY 权限。
我需要获取所有没有hide权限的用户。
例如,users 表有:
id ¦ name ¦ email ¦ password
---+ -------+-----------------+----------
1 ¦ Test 1 ¦ test@gmail.com ¦ 1234
2 ¦ Test 2 ¦ test2@gmail.com ¦ 2345
3 ¦ Test 3 ¦ test3@gmail.com ¦ 2345
4 ¦ Test 4 ¦ test4@gmail.com ¦ 8888
5 ¦ Test 5 ¦ test5@gmail.com ¦ 9876
权限表如下:
user_id ¦ permission
---------+------------
1 ¦ read
2 ¦ edit
2 ¦ hide
4 ¦ edit
5 ¦ hide
这是我迄今为止尝试过的:
SELECT *
FROM users
LEFT JOIN permissions
ON users.id = permissions.user_id
AND permissions.permission != 'hide'
但这仍然让我获得第二个用户,因为第二个用户也有权限编辑。
预期结果:
id ¦ name ¦ email ¦ password ¦ permission
---+ -------+-----------------+---------- +------------
1 ¦ Test 1 ¦ test@gmail.com ¦ 1234 ¦ read
3 ¦ Test 3 ¦ test3@gmail.com ¦ 2345 ¦ null
4 ¦ Test 4 ¦ test4@gmail.com ¦ 8888 ¦ edit
这里最好的方法是什么?
【问题讨论】:
-
users 表的示例数据没有 id 列,但查询使用该列...
-
再添加几行样本数据,同时指定预期的结果。