错误#4104:无法绑定多部分标识符

时间:2017-12-27 10:12:32

标签: sql-server join sql-server-2008-r2

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]):

access_sql-server_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关闭?

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,即用左联接链接查询,但是我发现如果我设置每个查询都可以链接到“唯一值”,就可以了。