从多个表中选择数据列表

时间:2020-03-24 00:07:56

标签: mysql sql

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

我想从所有3个项目表中依次获取项目详细信息(项目1,项目2,项目3),并根据产品ID从主表中获得项目的产品详细信息(例如:其中产品ID = 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 :(得分:0)

也许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

答案 1 :(得分:0)

您可以使用一系列left join

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;

我建议您将所有“项目”存储在一个表中,以方便进行此类查询。