SQL: объединение трех таблиц с использованием JOIN и UNION - PullRequest
0 голосов
/ 13 мая 2019

В базе данных управления арендой у меня есть три таблицы, одна из которых содержит мой товарный запас, одна для заказов этих статей, а другая хранит все проекты:

склад

IdStockType     Number     Caption     Inventory
1               100001     Monitor     10
2               100002     Keyboard    25
3               100003     Notebook    05
4               100004     Desktop     07

бронирования

id     IdStockType     RentalPrice     Factor     Project
1      2               15              5          1
2      2               03              2          2
3      4               90              3          2

проектов

id     Caption          startDate     endDate
1      Festival 2019    2019-03-01    2019-03-05
2      Kick-Off ABC     2019-04-15    2019-04-17
3      Big Conference   2019-04-16    2019-04-16

Теперь я хочу написать запрос, дающий мне весь запас с информациейо бронировании и проекте.Если статья не была сдана в аренду, она должна быть указана в любом случае.Если он был арендован, он должен быть указан только с информацией о бронировании и проекте.Так что это может быть там несколько раз:

IdStockType       Number       Factor       Inventory       Article       RentalPrice       Project
1                 100001       (NULL)       10              Monitor       (NULL)            (NULL)
2                 100002       5            25              Keyboard      15                Festival 2019
2                 100002       2            25              Keyboard      03                Kick-Off ABC
3                 100003       (NULL)       05              Notebook      (NULL)            (NULL)
4                 100004       3            07              Desktop       90                Kick-Off ABC

Теперь у меня проблема с моим запросом:


SELECT * FROM (

SELECT 
    p.IdStockType,
    p.Number,
    o.Factor,
    p.Inventory,
    p.Caption AS Article,   
    q.Caption AS Project

FROM
    stock p,
    bookings o,
    projects q

WHERE
    p.IdStockType = o.IdStockType AND
    o.Project = q.id

    ) AS u

 RIGHT JOIN (SELECT     
    r.IdStockType,
    r.Number,
    NULL,
    NULL,
    r.Caption AS Article,
    NULL

 FROM
    stock r) d ON d.IdStockType = u.IdStockType;

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

Кто-нибудь может мне помочь с запросом?

Заранее спасибо.

С уважением, Ларс

1 Ответ

1 голос
/ 13 мая 2019
select *
from Stock stock
    left join (
        select 
                    * 
            from
                    Bookings bookings
                join Projects projects
                    on bookings.Project = projects.Id
        ) bookingProjects on stock.IdStockType = bookingProjects.IdStockType
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...