2014-01-15 12 views
0

我想选择q1.res这将是FROM子查询的结果选择结果:的子查询

(SELECT SUM(gwr.res1)/(COUNT(*)*1000) as 'res' 
    FROM process.gwr 
    WHERE started = 1 AND gwr.user2 = g.id AND gwr.loss = g.id) AS q1 

的问题是,我想选择在子查询的g.id但由于某种原因它不能访问它返回的错误信息:

[Err] 1054 - Unknown column 'g.id' in 'where clause'

它没有意义,因为g.id(grand.idid科拉姆n)

SELECT 
    g.name, g.point, g.mx, q1.res 
FROM 
    (SELECT SUM(gwr.res1)/(COUNT(*)*1000) as 'res' 
    FROM process.gwr 
    WHERE (started = 1) AND (gwr.user2 = g.id) AND (gwr.loss = g.id)) AS q1, grand g 
LEFT JOIN process.users p ON (p.id = g.owner) 
WHERE 
    p.name != "" 
ORDER BY 
    g.point DESC, 
    g.mx DESC 
LIMIT 5 

问题在哪里?

+0

是子查询执行正常还是你得到相同的错误? – Milen

+0

@Milen Pavlov它不会执行,因为我试图使用主查询的g.id。 – Lucas

回答

0

尝试从子查询中的'res'中删除''。

SELECT 
    g.name, g.point, g.mx, q1.res 
FROM 
    (SELECT SUM(gwr.res1)/(COUNT(*)*1000) as res FROM process.gwr WHERE started = 1 AND gwr.user2 = g.id AND gwr.loss = g.id) AS q1, grand g 
LEFT JOIN process.users p ON (p.id = g.owner) 
WHERE 
    p.name != "" 
ORDER BY 
    g.point DESC, 
    g.mx DESC 
LIMIT 5 
0

你需要提什么数据库对象的“G”是指。意思是说,你需要在你的'FROM'部分中将它指定为一个表格(或视图),或者作为一个纯粹的交叉引用,或者 - 如果你感觉舒服 - 那么就使用某种连接。

e.g

SELECT SUM(gwr.res1)/(COUNT(*)*1000) as 'res' 
FROM process.gwr, process.g 
WHERE started = 1 
    AND gwr.user2 = g.id 
    AND gwr.loss = g.id 

通知在 'FROM' 部分中的 'process.g'。

希望有帮助。

K

+0

这将选择'process.g'的第一个g.id。我希望它使用主查询的'g.id'。 – Lucas

+0

没错。由于您在主要查询(外部查询)中引用表“grand”,因此无法在内部子查询中引用g。因此,您的选择是从内部删除where子句并将其保留在主查询where子句中,或者将内部查询中的表格grand指向g(并将其从外部删除)。 – punsandguns