Sql JOIN中的几个ON子句在Access中无法正常工作

Sql JOIN中的几个ON子句在Access中无法正常工作,sql,ms-access,sql-update,ms-access-2010,Sql,Ms Access,Sql Update,Ms Access 2010,这个问题真的很奇怪。下面的代码给出了一个错误,即存在不支持的JOIN语句 但后来我以这种方式更改了第三次连接的连接条件,它开始工作: update ((s2t left join tables on S2T.[table] = Tables.TableName) left join Columns on (S2T.[column] = Columns.ColumnName)) inner join s2t_source on ( s2t_source.source_table = S2T

这个问题真的很奇怪。下面的代码给出了一个错误,即存在不支持的JOIN语句

但后来我以这种方式更改了第三次连接的连接条件,它开始工作:

update ((s2t
left join tables on
S2T.[table] = Tables.TableName)
left join Columns on 
(S2T.[column] = Columns.ColumnName))
inner join s2t_source on
(    s2t_source.source_table = S2T.[table])

set s2t.source_id = 1;
我做错了什么?首先,我认为这个问题与ON子句有关,它使用了来自刚刚加入的表的信息。但后来我发现,这似乎是工作。我很困惑。这怎么可能,那个changing ON子句使查询失败

upd1:我认为这个问题与数据类型无关

文本数据类型:s2t_source.source_表,s2t_source.source_字段,s2t.[table],s2t.[column],Tables.TableName,Columns.ColumnName

整数数据类型:Tables.id、Columns.id、s2t.source\u id

upd2:我正在使用Access 2010。在这3个表中,名为tables和Columns的表之间只有1个外键

Tables.id=Columns.table\u id


…不是联接条件,而是WHERE条件。右侧站点变量应包含与前面的表/联接相关的内容

由于不了解上下文,我只能猜测一个解决方案:

update ((s2t
left join tables on
S2T.[table] = Tables.TableName)
left join Columns on 
(S2T.[column] = Columns.ColumnName))
left join s2t_source on
(    s2t_source.source_table = S2T.[table])
set s2t.source_id = 1
WHERE s2t_source.source_table = "money";

您可以发布您的列数据类型。。。我怀疑s2t_source.source_table=Tables.id不起作用,因为字符串和int类型。@krish我将它们转换为相同的数据类型。Access对数据类型很挑剔。。试着选演员。。或者只是相应地转换列以获得更好的性能。是转换列。。您使用的是什么版本的access?您能发布这些表和关系的db图吗?@krish Updated info,这个问题与Update语句本身无关,因为错误仍然存在于select TOTHE右侧站点变量中,它应该包含与以前的表/联接有关的内容。-但是为什么呢?在两个表的联接中,sql会将左表中的键与右表中的键进行比较。leftTableName内部/leftTableName/RIGHT连接leftTableColumnName=rightTbaleColumnName我是Stackoverflow的新手,所以我不知道是否允许链接,但看看这个:如果没有这个键比较,它将创建一个连接,其中左表中的每个数据集都与右表中的每个数据集相结合。另一种解释是:在带有联接的SELECT语句中,您希望从不同的表中获取两行,并在SELECT结果的一行中显示它。SQL需要一个指示器,指示哪些行应该合并。这是通过比较ON语句中的键来提供的
s2t_source.source_table = "money"
update ((s2t
left join tables on
S2T.[table] = Tables.TableName)
left join Columns on 
(S2T.[column] = Columns.ColumnName))
left join s2t_source on
(    s2t_source.source_table = S2T.[table])
set s2t.source_id = 1
WHERE s2t_source.source_table = "money";