用来自多个表的值填充一列

时间:2019-10-28 04:23:53

标签: sql ms-access

我有三个表,如下所示:

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_TableMotorbike_Table的{​​{1}}列吗? 答案:

Type

谢谢!

2 个答案:

答案 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

Demo on dbfiddle

答案 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'