Как заставить mysql VIEW показывать все записи, даже если в левой таблице нет никаких совпадений записей.
как заставить MySQL VIEW показывать все записи, даже если в левой таблице нет никаких совпадений записей.
Что я уже пробовал:
мой код, который я пробовал :
CREATE OR REPLACE VIEW `view_shortages_with_store` as SELECT st.store_ID, st.store_Name, sti.stitems_Name, sti.stitems_Type, sti.stcate_ID, sti.stitems_EpireDateStatus, sti.stitems_MinBalance, sti.stitems_stagnant, IF(ISNULL(ca.stitems_ID), pa.stitems_ID, ca.stitems_ID) AS stitems_ID, COALESCE(ca.Amount, 0) + COALESCE(pa.Amount,0) AS Stock FROM st_stores st LEFT JOIN (SELECT sns.stitems_ID, sns.StoreID, SUM(sns.StockQnty) AS Amount FROM stock_noserials sns GROUP BY sns.stitems_ID, sns.StoreID) ca ON ca.StoreID = st.store_ID LEFT JOIN (SELECT pis.stitems_ID, pis.ss_StoreID, COUNT(*) AS Amount FROM purchases_item_seriels pis WHERE pis.pis_Statues IN (0, 5, 6) GROUP BY pis.stitems_ID , pis.ss_StoreID) pa ON pa.ss_StoreID = st.store_ID INNER JOIN (SELECT sts.stitems_ID, sts.stitems_Name, sts.stitems_Type, sts.stcate_ID, sts.stitems_EpireDateStatus, sts.stitems_MinBalance, sts.stitems_stagnant FROM st_items sts GROUP BY sts.stitems_ID) sti ON sti.stitems_ID = ca.stitems_ID ||sti.stitems_ID = pa.stitems_ID WHERE COALESCE(ca.Amount, 0) + COALESCE(pa.Amount,0) < sti.stitems_MinBalance GROUP BY st.store_ID,sti.stitems_ID,COALESCE(ca.Amount, 0) + COALESCE(pa.Amount,0);
Бывший для того что мне нужно :
если (ПУНКТ А) имеет шток (5) в (1 магазин), и акции(0) _there не records_ в (магазин 2) показать результаты:
---------------------------------------------------- store | item | stock 1 | item A | 5 2 | item A | 0 3 | item A | 0 4 | item A | 0 ----------------------------------------------------
Gerry Schmitz
Используйте промежуточные запросы. Это сделает вещи более понятными. "Левое соединение" просто; это все остальное, что вы бросили в смесь, которая путает вещи без видимой причины, кроме "давайте сделаем это одно утверждение").
#realJSOP
Мне нравятся CTEs, но я не знаю, поддерживает ли их MySQL...
Gerry Schmitz
Обычно я использую "временные столы", но я ожидаю, что большинство людей не хотят заниматься домашним хозяйством. Мне нужно иметь возможность проверить свои результаты в любой момент, чтобы согреться. Я обнаружил, что оптимизатор запросов не умнее моих "промежуточных запросов". Модель также хорошо работает при преобразовании кода SAS в T-SQL.
#realJSOP
преимущество использования временных таблиц заключается в том, что вы можете создавать применимые индексы на них, делая последующие запросы к ним намного быстрее - вы не можете сделать это с CTE.
CHill60
Измените это внутреннее соединение на левое соединение