[英]why my subquery is not able to access columns from the outer query
我試圖讓所有不具有至少一個角色的用戶的價值為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
角色用戶:
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-“子句”中的未知列“ 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
根據給定的數據,假設您期望的輸出是返回“安全”最高的用戶詳細信息。 您需要執行兩個聯接,每個聯接來自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的用戶,然后讓所有用戶的ID不在(您的所有用戶查詢都在這里)。
例如:
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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.