2017-09-29 15 views
0

私は、リモートマシン(mariadb)に1つとローカルマシン(wamp)mysqlに2つのバージョンのSQLをセットアップしました。私はローカルバージョンで正しく動作するクエリを持っていますが、リモートバージョンでは別の結果が表示されます。どちらのテーブルでも、各テーブルのストレージエンジンタイプは同じです。しかし、dbのストレージエンジンは異なっています.1つはinnodbであり、もう1つはmyisamです。1つの選択ステートメント2つの異なる結果

SELECT @v:[email protected]+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 
+0

を試してみてください内側のクエリのみ? – SEarle1986

答えて

2

データは順不同と考えられています。 FROMのサブクエリは、(派生)テーブルです。

サブクエリのORDER BY句が余分です。 MySQLは自由に実行できます。

結果に間違いはありません。クエリが行うことに関するあなたの前提は間違っています。

0

おそらく、あなたは、このことを考えていた...

SELECT version.id 
    , CAST(st.up-st.down as SIGNED) votes 
    , meta.title 
    , @v:[email protected]+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 
+0

しかし、おかげで、私のmysqlのどちらのバージョンでもうまくいきません - 私に間違った結果が出る –

0

こんにちはあなたはまだたくサブクエリを続ける場合は、実行したときに何が起こる

`

SELECT @v:[email protected]+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 
    ) t 
CROSS JOIN(select @v := 0) r 
ORDER BY t.votes DESC 

`

+0

私のmariadbのリモートバージョンでは、 –

関連する問題