Mysql 1选择语句2不同的结果

Mysql 1选择语句2不同的结果,mysql,Mysql,我设置了两个版本的sql—一个在远程机器(mariadb)上,另一个在本地机器(wamp)mysql上。我有一个在本地版本上正确运行的查询,但在远程版本上收到不同的结果。两个数据库中每个表的存储引擎类型相同。但是,db的存储引擎不同——一个是innodb,另一个是myisam SELECT @v:=@v+1 as rank, t.* FROM ( SELECT version.id, CAST((st.up-st.down) as SIGNED) vote

我设置了两个版本的sql—一个在远程机器(mariadb)上,另一个在本地机器(wamp)mysql上。我有一个在本地版本上正确运行的查询,但在远程版本上收到不同的结果。两个数据库中每个表的存储引擎类型相同。但是,db的存储引擎不同——一个是innodb,另一个是myisam

SELECT @v:=@v+1 as rank, t.*
FROM (
      SELECT version.id, 
             CAST((st.up-st.down) as SIGNED) votes, 
             meta.title 
        FROM version 
        JOIN st ON version.id=st.id 
        JOIN meta ON version.id=meta.id 
       ORDER BY votes DESC
    ) t
本地版本-正确的结果

rank | id | votes | title 
 1     12    100    hello
 2     20     50    world
 3     5      20    helloworld
远程版本-结果不正确

rank | id | votes | title
 1     5     20     helloworld
 2     12    100    hello
 3     20    50     world

表中的数据被认为是无序的。
FROM
子句中的子查询是一个(派生)表

因此,子查询中的
orderby
子句是多余的。MySQL可以自由执行,也可以不执行


结果没有问题。您对查询的假设是错误的。

表中的数据被认为是无序的。
FROM
子句中的子查询是一个(派生)表

因此,子查询中的
orderby
子句是多余的。MySQL可以自由执行,也可以不执行


结果没有问题。您对查询所做操作的假设是错误的。

也许您考虑到了这一点

SELECT version.id
     , CAST(st.up-st.down as SIGNED) votes
     , meta.title
     , @v:=@v+1 rank
  FROM version 
  JOIN st 
    ON version.id = st.id 
  JOIN meta ON version.id = meta.id
  JOIN (SELECT @v:=1) vars
 ORDER 
    BY votes DESC

也许你在想这个

SELECT version.id
     , CAST(st.up-st.down as SIGNED) votes
     , meta.title
     , @v:=@v+1 rank
  FROM version 
  JOIN st 
    ON version.id = st.id 
  JOIN meta ON version.id = meta.id
  JOIN (SELECT @v:=1) vars
 ORDER 
    BY votes DESC

您好,如果您还想保留子查询,请尝试

`


`

您好,如果您还想保留子查询,请重试

`


`

当您只运行内部查询时会发生什么?当您只运行内部查询时会发生什么?您好,非常感谢,但是在我的mysql的任何一个版本中都不起作用-给我错误的结果我非常感谢,但是在我的mysql的任何一个版本中都不起作用-给我错误的结果我非常感谢,但是不起作用我的mariadb的远程版本-给了我不正确的结果我非常感谢,但是在我的mariadb的远程版本中不起作用-给了我不正确的结果