提问人:Jos 提问时间:8/1/2014 最后编辑:Jos 更新时间:8/4/2014 访问量:321
访问查询 将多对多的记录合并为一行
Access Query Combine Records from Many-to-Many into one row
问:
这应该很容易,但我很难过。
我有一个多对多的关系,例如,许多汽车可以有很多组件。
因此,我想要一个查询来返回所有汽车和使用的后续组件。如果未使用任何组件,则应只返回 NULL 值。
Car | Engine | Tyre
----------------------
1 | Engine3 |
2 | Engine4 | Tyre3
3 | Engine1 | Tyre1
但是使用以下 SQL:
SELECT Car.idCar, Engine.idEngine, Tyre.idTyre
FROM ((Component
RIGHT JOIN (Car
LEFT JOIN Car_Component ON Car.idCar = Car_Component.idCar) ON Component.idComponent = Car_Component.idComponent)
LEFT JOIN Engine ON Component.idComponent = Engine.idComponent)
LEFT JOIN Tyre ON Component.idComponent = Tyre.idComponent;
我得到:
Car | Engine | Tyre
----------------------
1 | Engine3 |
2 | Engine4 |
2 | | Tyre3
3 | Engine1 |
3 | | Tyre1
我一直在寻找解决方案很长一段时间了,我很确定我需要进行子查询,但我对子查询的了解有限,我不知道如何开始。
答:
0赞
Linger
8/1/2014
#1
以下查询是否适用于 SQL Fiddle:
SELECT DISTINCT Car.idCar, Engine.idEngine, Tyre.idTyre
FROM (((Car
INNER JOIN Car_Component ON Car.idCar = Car_Component.idCar)
INNER JOIN Component ON Car_Component.idComponent = Component.idComponent)
LEFT JOIN Engine ON Component.idComponent = Engine.idComponent)
LEFT JOIN Tyre ON Component.idComponent = Tyre.idComponent;
评论
0赞
Jos
8/1/2014
这不会返回任何记录。
0赞
Linger
8/1/2014
你确定它不起作用吗?我使用这个 SQL Fiddle 对其进行了测试,它返回了我期望的内容。你们有一些可以测试的样本数据吗?
0赞
Jos
8/1/2014
很好,那个 SQL 小提琴。我在那里测试了我的原始查询,它返回了与您的查询相同的内容。我现在肯定责怪 Access。
0赞
Jos
8/4/2014
我注意到您编辑了答案,但您使用的 idComponent 仍然不是唯一的。每个组件(例如 Engine、Tyre)都需要有一个唯一的 idComponent。我稍微编辑了您的 SQL 小提琴以正确表示数据。你能再看一眼吗?
评论