2012-06-18 35 views
1

这是我试图执行的MySQL查询。它保持失败,并出现错误: 字段列表中的未知列'staff_tbl.mainrank'。这怎么可能?我总是在MySql查询中遇到错误:错误1054:字段列表中未知的列'列名'

DROP TEMPORARY TABLE IF EXISTS `staff_tbl`; 
CREATE TEMPORARY TABLE staff_tbl(childrank TEXT, mainrank TEXT); 

INSERT INTO staff_tbl 
SELECT permissions_inheritance.child, permissions_inheritance.parent 
FROM permissions_inheritance; 

SELECT  authme.username, permissions_inheritance.child,  
permissions_inheritance.parent, staff_tbl.mainrank 
FROM  authme 
INNER JOIN permissions_inheritance ON authme.username = permissions_inheritance.child 
INNER JOIN staff_tbl alies2 ON staff_tbl.mainrank = permissions_inheritance.parent; 


DROP TABLE `staff_tbl`; 

如果你能帮助我,我将不胜感激。我把我的头发都拉出来了。所以你们是我最后的希望。我仍然是一个新手:)

回答

1

在最后SELECT你有最后一次加入错误。你加入staff_tbl并给它一个别名(alies2)。您必须在随后的语句(alies2.mainrank = permissions_inheritance.parent而不是staff_tbl.mainrank = permissions_inheritance.parent)中使用该别名,但您没有。

试着写你的最后SELECT这样的:

SELECT  a.username, p.child, p.parent, s.mainrank 
FROM  authme a 
INNER JOIN permissions_inheritance p ON a.username = p.child 
INNER JOIN staff_tbl s ON s.mainrank = p.parent; 

我解决了这个上面。我还为每个表设置了一个别名,使查询更短,因此更具可读性。

+0

非常感谢,它的工作!如果你不介意,你能解释为什么这个工作? – Krimson

+0

@VidhuShresthBhatnagar看到我编辑的答案。 –

0

MySQL允许创建两个同名的表,如果其中一个是临时

在查询中您试图加入临时表,但MySQL加入另一个非临时表staff_tbl表,其中不包含mainrank字段。

所以,先放下这个非临时表。

相关问题