我试图让所有没有至少一个角色的用户获得值为secure = 1
例如: 假设我们有这些数据:
用户:
id | name | email |password
500 | admin | admin@gmail.com | something
600 | someuser | test@gmail.com | something
作用:
id | name | secured
1 | Administrator | 1
2 | Guest | 0
3 | Normal | 0
roles_user:
user_id | role_id
500 | 1
500 | 3
600 | 2
600 | 3
我希望查询返回: 只有id为600的用户
查询:
SELECT *
FROM `users`
WHERE (SELECT MAX(roles.secured) FROM roles
JOIN role_user
ON role_user.user_id = users.id
AND role_user.role_id = roles.id) != 1
返回一个mysql错误:
你可以帮忙吗?1054 - 'on clause'
中的未知列'users.id'
架构:
用户:
Column Type Null Default Comments
id (Primary) int(10) No
name varchar(255) No
email varchar(255) No
password varchar(60) No
blocked tinyint(1) No 0
remember_token varchar(100) Yes NULL
roles:
Column Type Null Default Comments
id (Primary) int(10) No
name varchar(255) No
secured tinyint(1) No 1
display_name varchar(255) Yes NULL
description varchar(255) Yes NULL
role_user:
Column Type Null Default Comments
user_id (Primary) int(10) No
role_id (Primary) int(10) No
答案 0 :(得分:0)
根据您提供的数据,假设您想要的输出是返回具有最高“安全”的用户的详细信息。您需要对role_user表中的每个表执行两次连接。然后把你的位置放在最后只返回最大值条目。
SELECT *
FROM `users`
JOIN role_user
ON users.id = role_user.user_id
JOIN roles
ON roles.id = role_user.role_id
WHERE roles.secured = (SELECT MAX(roles.secured) FROM roles
为了让所有没有安全值为1的用户,你应该确定安全值为1的用户,然后让所有用户WHERE id NOT IN(这里得到所有用户的查询)。
例如:
SELECT *
FROM `users`
WHERE users.id NOT IN (SELECT * FROM users
JOIN role_user
ON users.id = role_user.user_id
JOIN roles
ON roles.id = role_user.role_id
WHERE roles.secured = 1)