Могу ли я выполнить этот запрос с помощью рекурсии в SQL? - PullRequest
0 голосов
/ 11 января 2019

У меня есть основная таблица и дополнительная таблица. Главная таблица - это основной список деталей, подтаблица - это коллективные детали, необходимые для его построения. Каждая дочерняя часть связана с родительской частью через ParentID.

Деталь или 'child' имеет ChildID, который указывает на свою собственную запись в основном списке деталей. Мы используем эту ссылку, чтобы узнать цену, так как внутри подтаблицы хранится только идентификатор.

Очень часто только цены, отмеченные как сабвуфер, сохраняются. Этот запрос, приведенный ниже, работает для того, чтобы свести затраты для любой записи, суммируя сумму всех цен внутри своего списка подпунктов.

Что я хотел бы сделать, так это то, что если подчасть имеет тип PartType = master, то я бы хотела свернуть ее стоимость, используя этот же запрос, и использовать ее в качестве цены.

Я понимаю, что это довольно сложный вопрос, возможно ли это?

Select *, ifnull(
    (SELECT SUM(main.PricePer * Qty) 
     FROM sub inner join main on sub.ChildID = main.ID 
     where sub.ParentID = main1.PID), 
     0) 
from main as main1

ПРИМЕР:

У нас есть

Основная таблица Часть 1 и 4 в качестве основных частей. Часть 1 точно сводит общую стоимость, потому что все ее части обозначены как дополнительные. Но часть 4 имеет часть 1 как часть. Это означает, что это ссылка на PricePer не является точной. Он должен использовать TotalCost для части 1 при суммировании, но для этого мне нужно как-то вложить запрос part1, используемый внутри запроса для части 4.

ID | Name | TotalCost | PricePer | PartType

1    Part1  10.00       0.00       master 

2    Part2  0.00        6.00       sub

3    Part3  0.00        2.00       sub

4    Part4  4.00        0.00       master    //should be 14.00

Подстолье для части 1

ParentID | ChildID | Name | Qty

1          2         Part2  1

1          3         Part3  2

Подстолье для части 4

ParentID | ChildID | Name | Qty

4          1         Part1  1

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