2013-07-09 124 views
0

我無法在mysql中運行查詢。特意我不想做select id from roles ...mysql查詢錯誤1054 - 未知列

查詢

select rtu.role_id 
from roles r 
where id =(select role_id 
      from roles_to_user rtu 
      where user_id=1) 

錯誤

ERROR 1054 (42S22): Unknown column 'rtu.role_id' in 'field list' 

遞減roles_to_user:

+---------+---------+------+-----+---------+-------+ 
| Field | Type | Null | Key | Default | Extra | 
+---------+---------+------+-----+---------+-------+ 
| user_id | int(11) | NO | PRI | NULL |  | 
| role_id | int(11) | NO | PRI | NULL |  | 
+---------+---------+------+-----+---------+-------+ 

遞減角色:

+-------+-------------+------+-----+---------+----------------+ 
| Field | Type  | Null | Key | Default | Extra   | 
+-------+-------------+------+-----+---------+----------------+ 
| id | int(11)  | NO | PRI | NULL | auto_increment | 
| name | varchar(80) | NO |  | NULL |    | 
+-------+-------------+------+-----+---------+----------------+ 

回答

1

您不能像這樣使用外部內部選擇的列。選擇r.id代替

select r.id 
from roles r 
where id = (select role_id 
      from roles_to_user rtu 
      where user_id = 1) 

BTW,這將失敗,如果內部的選擇回報超過1分的紀錄。使用join代替

select rtu.role_id 
from roles r 
inner join roles_to_user rtu on rtu.role_id = r.id 
where rtu.user_id = 1 
+0

旁邊的語法,兩者之間有區別嗎? – Nir

+0

是的。第一個查詢對於用戶的多個角色失敗。第二個返回每一行的記錄。對於許多記錄可能會有性能差異,但可以使用'explain select ...'來檢查 –

0

你的別名RTU只在你的子查詢可用的,而不是在主之一。