Использование множественного левого соединения в postgresql - PullRequest
0 голосов
/ 05 ноября 2018

Я новичок в области компьютеров и работаю над SQL. Я использую несколько запросов на соединение в PostgreSql. Я пытаюсь сделать систему управления запасами. У меня есть 3 таблицы следующим образом:

  1. inventory_limit_stock: id (int, PK), inventory_id (varchar), product_id (int), min_stock_limit (int)
  2. product_inventory: идентификатор (int, PK), инвентаризационный_ид (int), product_id (int), in_stock (int)
  3. other_inventory: id (int, PK), product_id, A (int), B (int), C (int)

Итак, я хочу показать список товаров, которых на складе меньше, чем минимальный лимит, установленный в Таблице 1. inventory_id в Таблице 1 содержит значение либо в цифрах, либо в «A», «B», «C». Если это число, оно относится к Таблице 2, иначе относится к Таблице 1. Так, например, если inventory_id Таблицы 1 содержит значение 2, оно проверит в Таблице 2 и получит значение in_stock. Хотя, если оно содержит значение «A», оно ссылается на таблицу 3 со столбцом A, и значение в нем будет принято. Я попробовал следующий запрос, но у меня не получилось.

SELECT ils.product_id as limit_prod, ils.inventory_id as limit_inv from inventory_limit_stock ils 
left join product_inventory as pi on pi.product_id = ils.product_id 
left join other_inventory oi on oi.product_id = ils.product_id 
where (COALESCE(ils.min_stock_limit,0) > COALESCE(SUM(pi.in_stock), SUM(oi.limit_inv), 0)) group by ils.product_id, ils.inventory_id

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

EDIT

Таблица 1 - inventory_limit_stock

id | product_id | inventory_id | min_stock_limit
1  |    121     |      5       |       25
2  |    052     |      B       |       27
3  |    8       |      13      |       11
4  |    121     |      13      |       35

Таблица 2 - Товарный инвентарь

id | product_id | inventory_id | in_stock
1  |    121     |      5       |    42
2  |    742     |      15      |    12
3  |    8       |      13      |    09
4  |    121     |      13      |    25

Таблица 3 - Другие_инвентарии

id | product_id |  A  | B  | C
1  |    121     |  42 | 12 | 11
2  |    052     |  42 | 25 | 25

Список результатов (Должен показать список с продуктами in_stock количество <минимальный лимит) </p>

product_id | inventory | minimum_stock_limit | in_stock_available
    8      |     13    |        11           |        9
   121     |     13    |        35           |        25
   052     |     B     |        27           |        25

1 Ответ

0 голосов
/ 05 ноября 2018

Для агрегированного результата вы должны использовать, а не где

SELECT ils.product_id as limit_prod
  , ils.inventory_id as limit_inv 
from inventory_limit_stock ils 
left join product_inventory as pi on pi.product_id = ils.product_id 
left join other_inventory oi on oi.product_id = ils.product_id 
group by ils.product_id, ils.inventory_id
HAVING (COALESCE(ils.min_stock_limit,0) >COALESCE(SUM(pi.quantity), SUM(oi.limit_inv), 0)) 

имеющий предложение работать с результатом выбора .. где работа с необработанными значениями в таблице ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...