Как работать с таблицей многие к многим?

146
21 мая 2019, 09:20

База для фирмы сборки компьютеров. Есть 5 таблиц

Sotrs(Сотрудник собирающий ПК):
    SotrID
    FIO
Clients(Клиенты):
    ClientID
    FIO
Components(Компоненты):
    ComponentID
    ComponentName
    Price
Assemblage(сама сборка):
    AssembID
    ClientID
    SotrID
Relations(таблица связей компонента и сборки):
    RelationID
    AssembID
    ComponentID

Пытаюсь запросом получить данные в таком формате:

    AssembID
    ClientFIO
    SotrFIO
    AllComponentPrice

Получилась такая ерунда:

SELECT assemblage.AssembID as "ID", clients.FIO as "ClientFIO", sotrs.FIO as "SotrFIO", SUM(SELECT "price" FROM (SELECT "assembID" FROM "assemblage" LEFT JOIN "relations" GROUP BY "AssembID")) as "FullPrice"
FROM "assemblage"
    LEFT JOIN "clients" ON "assemblage"."ClientID"="clients"."ClientID"
    LEFT JOIN "sotrs" ON "assemblage"."SotrID"="sotrs"."SotrID"
GROUP BY "assemblage"."AssembID"

Не могу понять, как работать с таблицей многие к многим?

Answer 1

не могу понять как работать с таблицей многие к многим

Просто продолжай добавлять JOIN'ы пока таблицы не кончаться:

SELECT 
  assemblage.AssembID as "ID",
  clients.FIO as "ClientFIO",
  sotrs.FIO as "SotrFIO",
  SUM(price) as "FullPrice"
FROM "assemblage"
    LEFT JOIN "clients" ON "assemblage"."ClientID"="clients"."ClientID"
    LEFT JOIN "sotrs" ON "assemblage"."SotrID"="sotrs"."SotrID"
    JOIN Relations ON assemblage.AssembID = Relations.AssembID
    JOIN Components  ON Relations.ComponentID = Components.ComponentID
GROUP BY "assemblage"."AssembID"

Если есть желание сделать именно с подзапросом, то как-то так (непроверенно):

SELECT 
  assemblage.AssembID as "ID",
  clients.FIO as "ClientFIO",
  sotrs.FIO as "SotrFIO",
  ( SELECT SUM("price")
    FROM "relations" 
    LEFT JOIN "Components" ON relations.ComponentID = Components.ComponentID
    WHERE relations.AssembID = ID
    GROUP BY "AssembID"
  ) AS "FullPrice"
FROM "assemblage"
    LEFT JOIN "clients" ON "assemblage"."ClientID"="clients"."ClientID"
    LEFT JOIN "sotrs" ON "assemblage"."SotrID"="sotrs"."SotrID"
READ ALSO
как сделать группировку по дням mysql?

как сделать группировку по дням mysql?

Подскажите с запросом:

140
Проблема шрифтов на mac os mojave

Проблема шрифтов на mac os mojave

Использую Грузинский шрифтРаньше все было в порядке

192
Адаптация под мобильные устройства bootstrap carousel

Адаптация под мобильные устройства bootstrap carousel

Есть два слайда для слайдера, в каждом слайде находится 4 блока с информациейНа десктопе показывает 4 блока, на планшете 2, а на мобильном всё...

152