Member 14076249 Ответов: 1

Результат Sql запроса не совпадает с итогом


Привет, ребята, у меня есть проблема здесь в моем sql-запросе. Прежде чем мой запрос должен замедлиться, чтобы выполнить его, поэтому я повторяю его и успешно запускаю гораздо быстрее, чем оригинал. Моя проблема сейчас заключается в том, что данные или общая сводка за месяц не совпадают с общей суммой моего excel.

Общая сумма, которую я получаю от своего sql - запроса, составляет
14,960,304.41


Общая сумма, которую я получил от excel, составляет 15,212,500.00

Я попробовал использовать EXPLAIN и вот мой результат

TABLE
tin
ti
po
tp

TYPE
ALL
eq_ref
eq_ref
eq_ref

NULL
PRIMARY
PRIMARY,tertiary
PRIMARY

rows
20248
1
1
1

filtered
100
100
100
100

Extra
Using where; Using temporary; Using filesort
Using where
Using where
Using where


Что я уже пробовал:

SELECT IFNULL(tp.remarks, '') AS remarks, tin.qty, IFNULL(tin.unit_description, '') AS unit_description, 
IFNULL(tp.description, '') AS description, 
tin.unit_price, 
tin.amount, 
IFNULL(ti.supplier, '') AS supplier, 
IFNULL(po.remarks, '') AS remarks, 
IFNULL(ti.invoice_number, '') AS invoice_number, 
IFNULL(ti.wrr_number, '') AS wrr_number, 
IFNULL(po.po_date, '') AS po_date, 
IFNULL(ti.si_date, '') AS si_date, 
IFNULL(po.po_locations, '') AS po_locations, 
IFNULL(ti.remarks, '') AS remarks 
FROM gen.purchase_order po  
JOIN gen.tbl_invoiceheadersup ti ON po.id = ti.po_id 
 JOIN gen.tbl_invoicedetailssup tin  ON ti.id = tin.invoice_details_id  
JOIN   gen.tbl_purchase_request_details  tp  ON tin.invoice_details_id = tp.id 
WHERE (po_date BETWEEN CAST('2019-06-01' AS DATE) AND CAST('2019-06-30' AS DATE)) 
AND ti.remarks LIKE CAST('' AS char) 
AND po_locations LIKE CAST('%Gtsi%' AS char) 
AND tp.description NOT LIKE CAST('%Servicing%' AS char) 
OR  po_locations LIKE CAST('%Gtsi%' AS char) 
AND tp.description NOT LIKE CAST('%Servicing%' AS char) 
AND (ti.remarks LIKE CAST('%For Jun%' AS char) 
OR ti.remarks LIKE CAST('%Recovery%' AS char) 
OR ti.remarks LIKE CAST('%Capex%' AS char) 
OR ti.remarks LIKE CAST('%Charge%' AS char))  ORDER BY po_date

F-ES Sitecore

Я бы рекомендовал работать с гораздо меньшим результирующим набором из 10-100 записей, которые также создают несоответствие, и попытаться понять, что происходит из этого. Почти невозможно сказать, что может быть неправильно из огромного набора результатов.

1 Ответов

Рейтинг:
2

Patrice T

Цитата:
Я попробовал использовать EXPLAIN и вот мой результат

Очевидный ответ заключается в том, что некоторые записи, находящиеся в excel, фильтруются в запросе.
Единственный способ-получить список всех записей из запроса и сравнить их со списком excel, чтобы увидеть, что отсутствует или отличается.
Когда вы знаете, какая запись фильтруется, проверьте запрос, чтобы увидеть причину.
Плохие новости, мы не можем сделать это для вас.