0

MySQL 5.5.20 から MariaDB 5.5.50 に移行したばかりですが、1 つのクエリで非常に奇妙な問題が発生しました。

このクエリは Mysql では機能しますが、MariaDB では機能しません。

SELECT 'za_faktura' AS tabulka,
       za_faktura.id,
       za_faktura.r_cislo,
       za_faktura.o_za_platba,
       za_faktura.a_vystaveni,
       za_faktura.a_splatnost,
       za_faktura.a_zaplaceno,
       0            AS storno,
       za_faktura.p_fakturovano,
       za_faktura.p_fakturovano_mena,
       za_faktura.p_fakturovano_dph,
       za_faktura.p_fakturovano_dph_mena,
       za_faktura.p_zaplaceno,
       za_faktura.p_zaplaceno_mena,
       za_faktura.p_zaplaceno_dph,
       za_faktura.p_zaplaceno_dph_mena
FROM   za_faktura
       INNER JOIN zamn_zakazky_faktury
               ON zamn_zakazky_faktury.i_za_faktura = za_faktura.id
WHERE  zamn_zakazky_faktury.i_za_zakazka = '27580'
       AND za_faktura.i_od = '6660'
       AND za_faktura.i_pro = '3916'
       AND za_faktura.p_fakturovano >= '600.00'
       AND za_faktura.p_fakturovano_mena = 'CZK'
       AND ( ( za_faktura.id = '26282'
               AND za_faktura.p_fakturovano_mena = 'CZK'
               AND za_faktura.p_fakturovano > '600' )
              OR ( za_faktura.id = '26243'
                   AND za_faktura.p_fakturovano_mena = 'CZK'
                   AND za_faktura.p_fakturovano > '3000' )
              OR ( za_faktura.id <> '26282'
                   AND za_faktura.id <> '26243' ) )
ORDER  BY za_faktura.p_fakturovano - '600.00' ASC 

マリアから拡張された説明:

id select_type table type possible_keys key key_len ref rows filtered Extra  
1 SIMPLE zamn_zakazky_faktury range  PRIMARY            PRIMARY 4                         NULL 4 75.00 Using where; Using index; Using temporary; Using f...  
1 SIMPLE za_faktura           eq_ref PRIMARY,i_od,i_pro PRIMARY 4 guidepraguecz.zamn_zakazky_faktury.i_za_faktura 1 100.00 Using index condition; Using where

最後の句の OR の順序を置き換えた場合、MariaDB で動作します。

id select_type table type possible_keys key key_len ref rows filtered Extra  
1 SIMPLE zamn_zakazky_faktury ref PRIMARY                    PRIMARY 4 const                4 100.00 Using where; Using index; Using temporary; Using filesort  
1 SIMPLE za_faktura               eq_ref  PRIMARY,i_od,i_pro PRIMARY 4 guidepraguecz.zamn_zakazky_faktury.i_za_faktura 1 100.00 Using index condition; Using where

それで...

SELECT 'za_faktura' AS tabulka,
       za_faktura.id,
       za_faktura.r_cislo,
       za_faktura.o_za_platba,
       za_faktura.a_vystaveni,
       za_faktura.a_splatnost,
       za_faktura.a_zaplaceno,
       0            AS storno,
       za_faktura.p_fakturovano,
       za_faktura.p_fakturovano_mena,
       za_faktura.p_fakturovano_dph,
       za_faktura.p_fakturovano_dph_mena,
       za_faktura.p_zaplaceno,
       za_faktura.p_zaplaceno_mena,
       za_faktura.p_zaplaceno_dph,
       za_faktura.p_zaplaceno_dph_mena
FROM   za_faktura
       INNER JOIN zamn_zakazky_faktury
               ON zamn_zakazky_faktury.i_za_faktura = za_faktura.id
WHERE  zamn_zakazky_faktury.i_za_zakazka = '27580'
       AND za_faktura.i_od = '6660'
       AND za_faktura.i_pro = '3916'
       AND za_faktura.p_fakturovano >= '600.00'
       AND za_faktura.p_fakturovano_mena = 'CZK'
       AND ( ( za_faktura.id <> '26282'
               AND za_faktura.id <> '26243' )
              OR ( za_faktura.id = '26282'
                   AND za_faktura.p_fakturovano_mena = 'CZK'
                   AND za_faktura.p_fakturovano > '600' )
              OR ( za_faktura.id = '26243'
                   AND za_faktura.p_fakturovano_mena = 'CZK'
                   AND za_faktura.p_fakturovano > '3000' ) )
ORDER  BY za_faktura.p_fakturovano - '600.00' ASC 

誰かが同様の奇妙な問題を見つけましたか? 設定などに解決策はありますか...ネット上では見つかりません。MariaDB のバグである場合、MySQL からの切り替えで多くの問題が発生するはずです。

ありがとう、

4

1 に答える 1