Выберите список данных из нескольких таблиц - PullRequest
0 голосов
/ 24 марта 2020

Таблица Item1:

----------------------------------
id  |  name   | price | product_id           
----------------------------------
1   | Laptop  | 50   |  20
2   | PC      | 150  |  10
3   | Notebook| 125  |  25

Таблица Item2:

 ----------------------------------
id  |  name   | price | product_id           
----------------------------------
1   | Mobile  | 50   |  20
2   | Landline| 150  |  10
3   | Pager   | 125  |  25

Таблица Item3:

 ----------------------------------
id  |  name   | price | product_id           
----------------------------------
1   | Canon   | 250   |  20
2   | Nikon   | 150   |  10
3   | Sony    | 325   |  25

Основная таблица:

------------------------------------------------------------------
product_id   | quantity     | manufacturer   | shipment | item
------------------------------------------------------------------
20           | 150          |     China      | Delivery | item1  
20           | 200          |     India      | Delivery | item2
20           | 300          |     USA        | Pickup   | item3 
15           | 200          |     USA        | Pickup   | Item2

Я хотел бы получить сведения об элементе из всех трех таблиц элементов в порядке (элемент 1, элемент 2, элемент 3) и сведения о продукте для элементов из основной таблицы на основе идентификатора продукта (например, где идентификатор продукта = 20), например, Результат ниже:

----------------------------------------------------------------------------
item       | name       | price    | quantity   | manufacturer | shipment 
----------------------------------------------------------------------------
item1      | Laptop     | 50       | 150        | China        | Delivery      
item2      | Mobile     | 50       | 200        | India        | Delivery      
item3      | Canon      | 250      | 300        | USA          | Pickup        

Большое спасибо за помощь!

Ответы [ 2 ]

0 голосов
/ 24 марта 2020

Вы можете использовать серию left join s:

SELECT m.item,
       COALESCE(i1.name, i2.name, i3.name) as name,
       COALESCE(i1.price, i2.price, i3.price) as price,
       m.quantity, m.manufacturer, m.shipment
FROM Master m LEFT JOIN
     Item1 i1
     ON i1.product_id = m.product_id AND
        m.item = 'item1' LEFT JOIN
     Item1 i2
     ON i2.product_id = m.product_id AND
        m.item = 'item2' LEFT JOIN
     Item1 i1
     ON i3.product_id = m.product_id AND
        m.item = 'item3'
WHERE m.product_id = 20;

Однако я бы посоветовал объединить их вместе:

SELECT m.item,
       COALESCE(i1.name, i2.name, i3.name) as name,
       COALESCE(i1.price, i2.price, i3.price) as price,
       m.quantity, m.manufacturer, m.shipment
FROM Master m LEFT JOIN
     ((SELECT 'item1' as item, i1.*
       FROM Item1 i1
      ) UNION ALL
      (SELECT 'item2' as item, i2.*
       FROM Item1 i2
      ) UNION ALL
      (SELECT 'item3' as item, i3.*
       FROM Item1 i3
      )
     ) i
     ON i.product_id = m.product_id AND
        i.item = m.item
WHERE m.product_id = 20;

Я бы посоветовал вам сохранить "элементы" все в одной таблице, чтобы облегчить такие запросы.

0 голосов
/ 24 марта 2020

Может быть, union может достичь желаемого результата?

SELECT m.item, i.name, i.price, m.quantity, m.manufacturer, m.shipment
FROM Master m
INNER JOIN Item1 i ON i.product_id = m.product_id
WHERE m.item = 'item1'
AND m.product_id = 20

UNION

SELECT m.item, i.name, i.price, m.quantity, m.manufacturer, m.shipment
FROM Master m
INNER JOIN Item2 i ON i.product_id = m.product_id
WHERE m.item = 'item2'
AND m.product_id = 20

UNION 

SELECT m.item, i.name, i.price, m.quantity, m.manufacturer, m.shipment
FROM Master m
INNER JOIN Item3 i ON i.product_id = m.product_id
WHERE m.item = 'item3'
AND m.product_id = 20
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...