1

这是我试图执行的 MySQL 查询。它不断失败并出现错误:字段列表中的未知列“staff_tbl.mainrank”。这怎么可能?

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`;

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

4

2 回答 2

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;

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

于 2012-06-18T12:31:07.087 回答
0

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

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

所以,首先删除这个非临时表。

于 2012-06-18T12:44:05.103 回答