akrvch
@akrvch

Как найти значение в связанных полях?

Есть три таблицы. Список комплектующих PurchaseOrder, список всех товаров и комплектующих к ним ItemList), заказы на приборы SalesOrder.
В ItemList есть поля ProdId (айди товара), ChildProdId (айди комплектующего, которое нужно для сбора этого товара, причем комплектующие так же могут иметь ChildProdId т.е комплектующие, которые нужны для сбора этой комплектующей). В SalesOrder находится айдишник заканного продукта. В PurchaseOrder находятся комплектующие, по которым будет производится поиск, т.е я смотрю нужна ли данная запчасть для какого-либо заказа, если да то вывожу для какого заказа и сколько штук. Вся соль заключается еще и в том, что, к примеру, есть заказ на прибор и он имеет дочерние продукты (ChildProdId): плату, корпус, проводку. Но плата, в составе имеет транзисторы, а транзисторы в составе имеют корпус транзистора. И, к примеру, именно корпус транзистора имеется в таблице PurchaseOrder, а значит его и номер заказа, к которому он нужен мне надо вывести.
Можно с помощью представлений решить данную проблему?
  • Вопрос задан
  • 51 просмотр
Решения вопроса 1
hint000
@hint000
у админа три руки
можно ли как то в с помощью представлений SQL решить данную проблему?
В принципе это даже гуглится: https://www.google.com/search?q=рекурсивные+sql+запросы
Но я бы не стал так делать без крайней необходимости. Как такое дебажить и рефакторить? Как переносить с MSSQL на другую СУБД? Хотя для учебного проекта всё это не критично. В реальной жизни таких формулировок задач не должно быть.

а транзисторы в составе имеют корпус транзистора
кристалл транзистора имеет в составе атомы кремния, мышьяка, кислорода и т.д., атомы имеют в составе протоны, нейтроны и электроны. Протон состоит из двух u-кварков и одного d-кварка, нейтрон состоит из двух d-кварков и одного u-кварка. И тут проблема: у нас нет комплектующих для сбора кварков. ;)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
tsklab
@tsklab Куратор тега SQL Server
Здесь отвечаю на вопросы.
Это не учебный проект
А если не учебный, то должен быть Parent, а не Child. У одного продукта — много комплектующих, а не один. А если комплектующее может входить в состав разных продуктов, то вообще нужна отдельная таблица. После приведения структуры к нормальному состоянию, используйте рекурсивный запрос.
Или переходите на графы: Введение в графовые базы данных SQL Server, Обработка графов в SQL Server.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы