У меня есть три таблицы в базе данных и хочу суммировать и сравнивать в одном выражении SELECT.
Логика заключается в том, что если одна статья работает с низким запасом, ее следует выбрать. Статья работает на низком уровне, если суммарное quantity
всех строк с одинаковым artID
в таблице. Articles in stock
(статья может содержать несколько строк в таблице и поэтому должна быть суммирована) ниже или равна warning
столбца в строке с соответствующий ID
. Это также специфично для warehouse
, что означает, что статья может быть полностью заполнена на одном складе и в то же время работать в другом. Именно поэтому необходимо суммировать сгруппированные на определенном складе. Информация о том, какой склад работает на низком уровне, и, например, artNr для статьи, также требуется, что можно найти в таблице Articles
Articles
+----+-------+---------+
| ID | artNr | warning |
+----+-------+---------+
| 1 | LA08 | 5 |
| 2 | LA09 | 10 |
| 3 | LA58 | 0 |
+----+-------+---------+
warehouse
+----+-------+
| ID | artID |
+----+-------+
| 3 | 1 |
| 4 | 1 |
| 5 | 2 |
+----+-------+
Articles in stock
+----+-------+-------------+----------+
| ID | artID | warehouseID | quantity |
+----+-------+-------------+----------+
| 1 | 1 | 3 | 10 |
| 2 | 1 | 5 | 15 |
| 3 | 2 | 5 | 45 |
| 4 | 1 | 3 | 20 |
| 5 | 3 | 5 | 4 |
+----+-------+-------------+----------+
select a.id, s.warehouseID, sum(s.quantity)
from articles a
join articles_in_stock s on a.id = s.artID
group by a.id, s.warehouseID
having sum(s.quantity) <= a.warning