sql >> データベース >  >> RDS >> Mysql

sqlfiddle.com5.5.30とMariaDB5.5.31で異なる結果

    恐れ入りますが、MariaDBをお渡しすることはできませんが、ユーザー変数がどのように出力されるかを確認するために、次のことを試してみてください。-

    SELECT  *
    FROM test_golf_player p
    LEFT JOIN 
    (
        SELECT pid, leaguepoints, @Sequence:=IF(@PrevPid = pid, @Sequence + 1, 0) AS aSequence, @PrevPid := pid
        FROM
        (
            SELECT pid, leaguepoints
            FROM test_golf_card 
            ORDER BY pid, leaguepoints DESC
        ) Sub1
        CROSS JOIN (SELECT @PrevPid := 0, @Sequence := 0) Sub2
    ) gC
    ON p.pid = gC.pid 
    ORDER BY p.name DESC 
    

    編集-結果を見て少し調査すると、MariaDBはサブクエリのORDERBYを無視しているようです。したがって、シーケンス番号はランダムな順序であり、pidが変更されるとリセットされます(順序が固定されていないため、ランダムに変更されます)。グーグルのビットとこれはMariaDBの意図的な機能のようです。 SQL標準では、テーブルは順序付けられていない行のセットとして定義され、サブ選択はテーブルとして扱われるため、順序は無視されます- https://kb.askmonty.org/en/why-is-order-by-in-a-from-subquery -無視/

    それは少し不利です。現時点では考えられないので、回避策があるかどうかはわかりません。これが対処することであった元の問題については、おそらく効率的ではない相関サブ選択を使用する必要があると思います。




    1. インデックスが範囲外であるため、インデックス2で引数をバインドできません

    2. 1〜3のランダムな番号を持つMySQL UPDATE

    3. MySQL(またはPHP?)はフィールドデータごとに結果をグループ化します

    4. oci_bind_by_nameおよびto_datePHP/ OCI / Oracle