Мы только что сделали крупное обновление в версии mysql от 5.0.51 до 5.6.22, и я только что заметил, что один из моих запросов больше не работает должным образом. Предложение HAVING не работает после обновления сервера
SELECT
p.id AS product_id,
p.code,
p.description,
p.unitofmeasure,
p.costprice,
p.packsize,
vc.rateinpercent,
CASE
WHEN Sum(sales.qty) IS NULL THEN 0
ELSE Sum(sales.qty)
END AS sold,
CASE
WHEN stock.stocklevel IS NULL THEN 0
ELSE stock.stocklevel
END AS stocklevel,
sum(sales.qty) - stock.stocklevel AS diff,
CEIL((sum(sales.qty) - stock.stocklevel)/p.packsize) AS amt
FROM products p
LEFT JOIN
(SELECT
col.product_id,
col.quantity AS qty
FROM customerorderlines col
LEFT JOIN customerorders co
ON co.id = col.customerorder_id
WHERE co.orderdate >= '2014-12-01 00:00:00'
AND co.orderdate <= '2015-02-09 23:59:59'
AND co.location_id IN (1,2,3,7)
) sales
ON sales.product_id = p.id
LEFT JOIN
(SELECT
product_id,
location_id,
Sum(stocklevel) AS stocklevel
FROM stock
WHERE location_id IN (1,2,3,7)
GROUP BY product_id
) stock
ON stock.product_id = p.id
LEFT JOIN vatcodes vc
ON vc.id = p.purchasevatcode_id
WHERE p.supplier_id IN (137)
AND p.currentstatus_v = 1
GROUP BY p.id
HAVING sold > stocklevel
ORDER BY sold DESC
На старом сервере, HAVING пункт отфильтровываются все результаты с минусами в, давая результат следующим образом:
Вместо этого я получаю следующий результат на новый сервер:
В основном, это отфильтровывать некоторые отрицательных результатов, но не все из них. (Наборы данных несколько дней назад, поэтому «Колпак« Freeze Gel Spray »и проданные и биржевые номера немного отличаются)
Оглядываясь назад, это замечательная вещь, но я не ожидал от нее каких-либо серьезных изменений запросов между обновлениями сервера, поэтому я не хотел проверять или проверять что-либо. К счастью, это один из двух или трех запросов, которые используют HAVING, поэтому, если мне придется перезаписать пару запросов, пусть будет так. Любые идеи относительно того, почему это правда? Если бы он не работал вообще, справедливо, но только частично работал?
Заранее спасибо за любой проницательности,
R