Мы просто перешли из MySQL 5.5.20 в MariaDB 5.5.50 Я сталкиваюсь с очень странной проблемой с одним запросом.Mariadb - интерпретация where where depedns на условиях порядка
Этот запрос работает на 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
EXPLAIN EXTENDED от Марии:
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
Если я заменил порядок ПРС в последнем пункте он работает с 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
Имейте enyone найти любую симпатичную странную проблему? Есть ли какие-либо решения в конфигурации и т. Д. Я не могу найти их в сети. Если это ошибка в MariaDB, это приводит к большому количеству предложений при переключении с MySQL.
Спасибо,
Довольно ясно, что два запроса не являются точно такими же, за исключением порядка двух или условий. –
Я не могу воспроизвести это - вы уверены, что базы данных одинаковы? –