Я ожидал, что этот запрос не выведет 0 значений, но это так. Я думал, что and (...) > 0
не будет выводить 0 значений. Итак, как я могу предотвратить вывод 0 значений?
select lot.*, sum(movement.quantity) as value
from lot
left join lot_movement as movement on lot.id = movement.lot_id
where lot.item_id = 8 and movement.storage_id = 3
and (select sum(lot_movement.quantity)
from lot_movement
where lot_movement.lot_id = lot.id
) > 0
group by lot.id;
Я пытался добавить and sum(lot_movement.quantity) \> 0
, но выдает ошибку invalid use of group function
.
я вижу это
and (select sum(lot_movement.quantity)
from lot_movement
where lot_movement.lot_id = lot.id
group by lot_movement.lot_id) > 0
является избыточным. Это не влияет на результат.
Измените lot.*
на lot.id
поделиться образцами данных. Это было рассмотрено в предыдущем комментарии, не повторяйте вопрос, который вы ввели в вопросе, задавая вопрос.
@DaniilShipilov: Но это предотвратит ошибку типа «недопустимое использование групповой функции».
Запрос в ссылке не совпадает с опубликованным запросом. Потратьте некоторое время, чтобы сделать вопрос последовательным. И ссылки нельзя использовать, тогда как текст можно.
Пожалуйста, используйте текст, а не изображения/ссылки, для текста, включая таблицы и ERD. Перефразируйте или процитируйте другой текст. Дайте только то, что вам нужно, и свяжите это со своей проблемой. Используйте изображения только для того, что не может быть выражено в виде текста или для дополнения текста. Включите легенду / ключ и объяснение с изображением. Пожалуйста, в вопросах кода укажите минимальный воспроизводимый пример. Как спроситьЦентр помощи Уточните, пожалуйста, правками, а не комментариями. PS Пожалуйста: обратная цитата `
не одинарная кавычка '
. Посмотрите на отформатированную версию вашего поста перед публикацией. Проверка орфографии. Разумно оформляйте код. Напишите конкретное название.
Пожалуйста, в вопросах кода дайте минимальный воспроизводимый пример - вырезать и вставить и исполняемый код и пример ввода; желаемый и фактический вывод (включая дословные сообщения об ошибках); теги и версии; четкая спецификация и объяснение. Для SQL включите DDL и табличный код инициализации. Для отладки, которая включает в себя наименьшее количество кода, который вы можете указать, это код, который вы показываете в порядке, расширенный кодом, который вы показываете, не в порядке. Как спроситьЦентр помощи Когда вы получаете результат, которого не ожидаете, приостановите выполнение общей цели, перейдите к 1-му подвыражению с неожиданным результатом и скажите, что вы ожидали и почему, подкрепленное документацией. (Основы отладки.)
Возможный дубликат Левое соединение с предложением Where
Ваш запрос не дает ожидаемого результата, потому что вы фильтруете по lot.item_id = 8 and movement.storage_id = 3
в предложении where
, но не применяете такую же фильтрацию в подзапросе.
Я не совсем уверен, чего вы пытаетесь достичь, но я подозреваю, что добавление предложения having
вместо подзапроса решает вашу проблему:
select lot.id, sum(movement.quantity) as value
from lot
left join lot_movement as movement on lot.id = movement.lot_id
where lot.item_id = 8 and movement.storage_id = 3
group by lot.id
having sum(movement.quantity) > 0
Ваш ответ очень полезен. Это решение проблемы. Большое тебе спасибо
Были бы полезны определения таблиц, выборочные данные и ожидаемый результат в виде текста. Обратите внимание, что группировка по одному столбцу при выборе всех столбцов вряд ли будет полезна.