MySql每个派生表都必须有自己的别名。即使所有人都有

MySql每个派生表都必须有自己的别名。即使所有人都有,mysql,sql,Mysql,Sql,在上面的sql中,我得到了一个错误:/*sql错误(1248):每个派生表都必须有自己的别名*/,即使我的所有派生表都有别名。没有围绕主sql的更新,一切正常。但是当我添加一个更新时,我得到了这个错误 最终结果是使用选择菜单中的rank更新列rank。只是更新带来了问题。里面有很大的选择是好的 这是下表,这是一份包含一些数据的表格 主表 UPDATE likesd a INNER JOIN ( select id, perCent, rank from ( select id,

在上面的sql中,我得到了一个错误:
/*sql错误(1248):每个派生表都必须有自己的别名*/
,即使我的所有派生表都有别名。没有围绕主sql的更新,一切正常。但是当我添加一个更新时,我得到了这个错误

最终结果是使用选择菜单中的
rank
更新列
rank
。只是更新带来了问题。里面有很大的选择是好的

这是下表,这是一份包含一些数据的表格

主表

UPDATE  likesd a
    INNER JOIN (
select id, perCent, rank
from
(
    select id, perCent, elmTotals 
    , @curRank :=   
        case 
           when @prevParent = parent then
               case 
                   when @prevCent = perCent then @curRank
                   else @curRank + 1
               end
           else 1
        end rank
    , @prevParent := parent
    , @prevCent := perCent
    from 
    (
        select child.id, child.perCent, child.parent
        from likesd parent
        inner join likesd child
           on child.parent = parent.id and child.country = parent.country
        where parent.type = 3
        order by parent.id, child.perCent desc
    ) b
    cross join (SELECT @curRank := 0, @prevParent := null, @prevCent := null) c
) d ) ON a.country = d.country and a.id = d.id
    SET a.rank = d.rank
    WHERE a.type = 10;

您缺少一个别名:

UPDATE  likesd a
    INNER JOIN (
select id, perCent, rank
from
(
    select id, perCent, elmTotals 
    , @curRank :=   
        case 
           when @prevParent = parent then
               case 
                   when @prevCent = perCent then @curRank
                   else @curRank + 1
               end
           else 1
        end rank
    , @prevParent := parent
    , @prevCent := perCent
    from 
    (
        select child.id, child.perCent, child.parent
        from likesd parent
        inner join likesd child
           on child.parent = parent.id and child.country = parent.country
        where parent.type = 3
        order by parent.id, child.perCent desc
    ) b
    cross join (SELECT @curRank := 0, @prevParent := null, @prevCent := null) c
) d )f ON a.country = d.country and a.id = d.id
    SET a.rank = d.rank
    WHERE a.type = 10;

您缺少一个别名:

UPDATE  likesd a
    INNER JOIN (
select id, perCent, rank
from
(
    select id, perCent, elmTotals 
    , @curRank :=   
        case 
           when @prevParent = parent then
               case 
                   when @prevCent = perCent then @curRank
                   else @curRank + 1
               end
           else 1
        end rank
    , @prevParent := parent
    , @prevCent := perCent
    from 
    (
        select child.id, child.perCent, child.parent
        from likesd parent
        inner join likesd child
           on child.parent = parent.id and child.country = parent.country
        where parent.type = 3
        order by parent.id, child.perCent desc
    ) b
    cross join (SELECT @curRank := 0, @prevParent := null, @prevCent := null) c
) d )f ON a.country = d.country and a.id = d.id
    SET a.rank = d.rank
    WHERE a.type = 10;

我在评论中发布了
)f
作为
)missingTableAlias
。首先得到:)在on子句中,现在应该是a。和f。或者a。和d。?我在on子句中不断得到未知列“d.country”我认为应该是a.country=f.country和a.id=f.id只是一件小事,我是否应该在
WHERE
子句中也指定连接条件以使事情更安全?我不认为将条件也放在WHERE上会使事情更安全。我在注释中发布了
)f
作为
)missingTableAlias
。首先得到:)在on子句中,现在应该是a。和f。或者a。和d。?我在on子句中不断得到未知列“d.country”我认为应该是a.country=f.country和a.id=f.id只是一件小事,我是否应该在
WHERE
子句中也指定连接条件以使事情更安全?我不认为将这些条件也设置在WHERE上会使事情更安全。sqlfiddle是否为其他人关闭?@Mihai是的,它关闭了。sqlfiddle是否为其他人关闭了?@Mihai是的,它关闭了。
cross join (SELECT @curRank := 0, @prevParent := null, @prevCent := null) c
) d ) ON a.country = d.country and a.id = d.id
     ^ Here