Mysql 在where子句结果中选择具有左联接的表

Mysql 在where子句结果中选择具有左联接的表,mysql,sql,Mysql,Sql,下面的查询返回:1054-where子句中的未知列“word.id” select * from word,( SELECT sqrt(variance(ifnull(re_freq,0)))/avg(ifnull(re_freq,0)) cv FROM pre_cat left join (select * from goal where wordid= word.id)g on pre_cat.id= g.catid) gg 我怎样才能修好它 下面的查询返回正确的结果,但只返回一条记录

下面的查询返回:1054-where子句中的未知列“word.id”

select * from word,(
SELECT sqrt(variance(ifnull(re_freq,0)))/avg(ifnull(re_freq,0)) cv
FROM pre_cat 
left join (select * from goal where wordid= word.id)g on pre_cat.id= g.catid) gg
我怎样才能修好它

下面的查询返回正确的结果,但只返回一条记录

SELECT  avg(ifnull(re_freq,0)) , variance(ifnull(re_freq,0)),sqrt(variance(ifnull(re_freq,0)))/avg(ifnull(re_freq,0))
FROM pre_cat 
left join (select * from goal where wordid= 9690)g on pre_cat.id= g.catid
本次查询的crrect结果为:0.50000000375 已上载的模式SQL FIDLE

我怎么能这样做呢? 请帮帮我

下面的存储过程工作正常,但耗时太长

BEGIN
    DECLARE wo_id INT;
    DECLARE num INT;
    DECLARE i INT;
    DECLARE res DOUBLE;
    SELECT COUNT(*) FROM word INTO num;
    SET i=0;
    WHILE i<num DO 
        SELECT  sqrt(variance(ifnull(re_freq,0)))/avg(ifnull(re_freq,0)) FROM pre_cat left join (select * from goal where wordid= i )g on pre_cat.id= g.catid INTO res;
        update word set cv=res where id=i;
        SET i = i + 1;
    END WHILE;
END

您的连接语法错误。正如Jens所说,我们不能将外部表引用到内部sql中。您可以像下面这样选择

select * from word,(
SELECT sqrt(variance(ifnull(re_freq,0)))/avg(ifnull(re_freq,0)) cv
FROM pre_cat 
left join (select goal.* from goal join word on goal.wordid= word.id)g on pre_cat.id= g.catid) gg

只需通过wordid将word表与子查询联接即可

您不能在内部sql中引用外部表。您的联接语法不正确。请详细解释您到底想实现什么?@Rikesh我想更新单词表,并为每个单词设置变异系数,以简化我使用的Select而不是UPDATESOMY Explainclearly@Sathish感谢您的关注,我尝试执行第一个查询,但我不能!,第二个查询的结果正确,但只针对一个id!tanks为您解答,但此查询返回1064-您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,了解第2行的“SELECT sqrtvarianceifnullre_freq,0/avgifnullre_freq,0 cv,g.wor”附近要使用的正确语法。但不幸的是,我没有办法检查。我没有桌子等。对不起,这是一个大数据库!!再次感谢,但您的查询只返回一行。请再次更新。您可以尝试使用SQLFIDLE并在问题中发布感谢,它返回了错误的变异系数,我在SQLFIDLE中添加了模式,但我不知道如何导入文件感谢您的回答,但它返回了错误的变异系数
select * from word join
(SELECT sqrt(variance(ifnull(re_freq,0)))/avg(ifnull(re_freq,0)) cv,
       g.wordid
FROM pre_cat 
left join goal g on pre_cat.id= g.catid
group by g.catid) gg on gg.wordid= word.id