Access SQL根据缺少的条件插入整行

时间:2017-04-27 16:19:05

标签: sql ms-access access-vba sql-insert

我有两张桌子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行。

1 个答案:

答案 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);
否则,请修改以指定要填充和拉出的字段。