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
非常感谢您的帮助!
答案 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;
我建议您将所有“项目”存储在一个表中,以方便进行此类查询。