我有两张桌子BYFIELD和EXTRAFIELDS 我试图根据两个标准插入缺失的行 - " campo"和" categoria"。行有多个字段(至少十个) 如果campo在那里,我想添加丢失的campo行和丢失的类别 这就是我的全部:
strSQL = "INSERT INTO tblBYFIELD ([CAMPO], [CATEGORIA])" & _
"SELECT [EXTRAFIELDS].[CAMPO], [EXTRAFIELDS].[CATEGORIA]" _
"FROM [EXTRAFIELDS]" & _
"WHERE NOT EXISTS (SELECT ***TOP*** 1" &_
"FROM BYFIELD AS SIM"&_
"WHERE EXTRAFIELDS.[CAMPO] = SIM.[CAMPO] AND EXTRAFIELDS.[CATEGORIA] = SIM.[CATEGORIA]);"
CurrentDb.Execute strSQL
表BYFIELD示例: Campo Categoria Aceite Gas ETC ... Tintal 1PDP 0 0 0 Tintal 2PDNP 0 0 0
表EXTRAFIELDS示例: Campo Categoria Aceite Gas ETC ... Tintal 1PDP 0 0 0 Tintal 2PDNP 0 0 0 Tintal 3PD 0 0 0
我想插入缺少3PD的Tintal行。
答案 0 :(得分:0)
运行代码时会发生什么 - 错误,错误的结果,什么都没有?
你为什么在TOP附近有***?为什么要使用TOP 1?你真的想要只返回1条记录吗?正如@Andre所说,数据示例会有所帮助。你的描述并没有多大意义。
失踪&在第二行。缺少_前面的空格和#34之前的空格;在每一行的末尾。
"INSERT INTO tblBYFIELD ([CAMPO], [CATEGORIA]) " & _
"SELECT [EXTRAFIELDS].[CAMPO], [EXTRAFIELDS].[CATEGORIA] " & _
"FROM [EXTRAFIELDS] " & _
"WHERE NOT EXISTS (SELECT TOP 1 " & _
"FROM BYFIELD AS SIM " & _
"WHERE EXTRAFIELDS.[CAMPO] = SIM.[CAMPO] AND EXTRAFIELDS.[CATEGORIA] = SIM.[CATEGORIA]);"
这会更正语法,但不确定它是否会提供您想要的结果。
是否发布了测试示例数据。你想拉所有的田地吗?假设每个表中的字段名称相同且设计顺序相同,则可以:
INSERT INTO ByFields SELECT * FROM ExtraFields WHERE Campo & Categoria NOT IN (SELECT Campo & Categoria FROM ByFields);
否则,请修改以指定要填充和拉出的字段。