簡體   English   中英

為什么我的子查詢無法訪問外部查詢中的列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM