与this question类似,我发现此错误,我无法修复。
情况如下:
我们在Access 2003下有一个应用程序前端,其中包含来自SQL Server 2008 R2的链接表。
我们有一个表Vehicule(immat,secteur)和一个表Vehicule_suivi_km(immat,date,km)。我们的车辆存储在[Vehicule]表中,[immat]作为主键,其公里记录存储在[Vehicule_suivi_km]表中,[immat] + [date]作为主键。
现在我必须创建一年的活动摘要。我做了如下:
查询创建[MO km max 2016]:
SELECT Vehicule.immat, vsk2016.date, vsk2016.km
FROM Vehicule INNER JOIN Vehicule_suivi_km AS vsk2016 ON Vehicule.immat=vsk2016.immat
WHERE (((vsk2016.date)=(SELECT Max(date) FROM Vehicule_suivi_km WHERE (Vehicule_suivi_km.date<#01/01/17# And Vehicule_suivi_km.immat=vsk2016.immat))))
ORDER BY Vehicule.immat;
此代码在#01/01/2017#之前为我提供了最新的公里记录。
我在2017年再次这样做[MO km max 2017]:
SELECT Vehicule.immat, vsk2017.date, vsk2017.km
FROM Vehicule INNER JOIN Vehicule_suivi_km AS vsk2017 ON Vehicule.immat=vsk2017.immat
WHERE (((vsk2017.date)=(SELECT Max(date) FROM Vehicule_suivi_km WHERE (Vehicule_suivi_km.date<#01/01/18# And Vehicule_suivi_km.immat=vsk2017.immat))))
ORDER BY Vehicule.immat;
现在我想创建一个查询,加入这两个表,并从2017年的公里减去2016年的公里[MO km今年]:
SELECT [MO km max 2017].immat, [MO km max 2017].km-Nz([MO km max 2016].km,0) AS km
FROM [MO km max 2017] LEFT JOIN [MO km max 2016] ON [MO km max 2017].immat = [MO km max 2016].immat;
如果我们在01/01/2017之后购买了车辆,我会使用左连接。所以我使用Nz来转换0中的空值(在SQL Server中它可能由COALESCE函数,但我使用Access进行查询)
执行此查询时出现以下错误(多部分标识符无法绑定[#4104]):
如果我使用INNER JOIN而不是LEFT JOIN,我不会再收到此错误,但我只会在01/01/2017之前购买车辆的记录。
这是主要的关键问题吗?我无法得到我做错的事。
编辑1
错误消息是
[Microsoft] [SQL Server的ODBC驱动程序11] [SQL Server]多部分标识符&#34; vsk2016.immat&#34;无法受约束。 37000 4104 [Microsoft] [用于SQL Server的ODBC驱动程序11] [SQL Server]多部分标识符&#34; vsk2016.date&#34;无法受约束。 (#4104)
编辑2
在[MO km max 2016]和[MO km max 2017]中添加GROUP BY,它解决了我的问题:
SELECT Vehicule.immat, vsk2017.[date], vsk2017.km
FROM Vehicule INNER JOIN Vehicule_suivi_km AS vsk2017 ON Vehicule.immat=vsk2017.immat
WHERE (((vsk2017.[date])=(SELECT Max([date]) FROM Vehicule_suivi_km WHERE (Vehicule_suivi_km.[date]<#01/01/18# And Vehicule_suivi_km.immat=vsk2017.immat))))
GROUP BY Vehicule.immat, vsk2017.[date], vsk2017.km
ORDER BY Vehicule.immat;
但我仍然想知道为什么我收到此错误消息。发动机是否不确定&#34; immat&#34;在我的查询结果中是唯一的,所以我必须添加GROUP BY关闭?
答案 0 :(得分:1)
我遇到了同样的问题,即用左联接链接查询,但是我发现如果我设置每个查询都可以链接到“唯一值”,就可以了。