我有三个表,如下所示:
Order_Table
| OrderID | Type | ItemID |
+----------+-----------+---------+
| 0001 | Car | A001 |
| 0002 | Motorbike | A001 |
Car_Table
| ItemID | ItemDesc |
+---------+------------+
| A001 | Honda Jazz |
摩托车表
| ItemID | ItemDesc |
+---------+------------+
| A001 | Yamaha F1Z |
我需要通过仅添加一个名为ItemDesc
的列来将最后两个表合并到第一个表中。
有什么方法可以根据ItemDesc
列的值查询来自Car_Table
或Motorbike_Table
的{{1}}列吗?
答案:
Type
谢谢!
答案 0 :(得分:3)
您可以使用条件聚合来获取所需的结果,在Car_table
时从Type = Car
中选择一个值,在Motorbike_table
时从Type = Motorbike
中选择一个值:
SELECT Order_Table.OrderID, Order_Table.Type, Order_Table.ItemID,
IIF(Order_Tbl.Type = "Car", Car_Tbl.ItemDesc, Motorbike_Tbl.ItemDesc) AS ItemDesc
FROM Order_Table
LEFT JOIN Car_Table ON Order_Table.ItemID = Car_Table.ItemID
LEFT JOIN Motorbike_Table ON Order_Table.ItemID = Motorbike_Table.ItemID;
输出:
OrderID Type ItemID ItemDesc
1 Car A001 Honda Jazz
2 Motorbike A001 Yamaha F1Z
答案 1 :(得分:0)
您可以使用UNION ALL
:
SELECT o.OrderID, o.Type, o.ItemID, c.ItemDesc
FROM Order_Table o INNER JOIN
Car_Table c
ON c.ItemID = o.ItemID
WHERE o.Type = 'Car'
UNION ALL
SELECT o.OrderID, o.Type, o.ItemID, m.ItemDesc
FROM Order_Table o INNER JOIN
Motorbike_Table m
ON c.ItemID = m.ItemID
WHERE o.Type = 'Motorbike';
MS Access对联接很挑剔,因此我认为以下工作无效:
SELECT o.OrderID, o.Type, o.ItemID,
NZ(c.ItemDesc, m.ItemDesc) AS ItemDesc
FROM (Order_Table o LEFT JOIN
Car_Table c
ON c.ItemID = o.ItemID AND o.Type = 'Car'
) LEFT JOIN
Motorbike_Table m
ON m.ItemID = o.ItemID AND o.type = 'Motorbike'