如果值不存在,则追加查询应仅追加

时间:2016-08-08 06:40:34

标签: sql ms-access append

我正在尝试运行追加查询,但只有在没有值存在的情况下才能运行,以避免重复。

我听说你可以用Where子句做到这一点,但不知道如何实现它,因为我到目前为止所尝试的(见下面的代码)并没有真正给我正确的结果。

需要检查Saneringsmetodekode中是否已存在值,如果有,则不应执行任何操作。

INSERT INTO NySaneringsData ( DelledningsID, SaneringsmetodeKode )
SELECT SaneringsprojektImport.DelledningsID, SaneringsprojektImport.SaneringsmetodeKode
FROM NySaneringsData RIGHT JOIN SaneringsprojektImport ON NySaneringsData.DelledningsID = SaneringsprojektImport.DelledningsID
WHERE (((SaneringsprojektImport.SaneringsmetodeKode) Is Not Null) AND ((Exists (SELECT * FROM NySaneringsData WHERE NySaneringsData.SaneringsmetodeKode = SaneringsprojektImport.SaneringsmetodeKode))=False))
ORDER BY SaneringsprojektImport.DelledningsID;

非常感谢任何帮助。

4 个答案:

答案 0 :(得分:2)

使用这种结构:

INSERT INTO
SELECT
FROM
WHERE NOT EXISTS

在stackoverflow上提到这个类似的问题:

Insert INTO NOT EXISTS SQL access

您可以删除ORDER BY,因为它不相关(表格本质上没有排序)。

根据您的输入,它是SaneringsmetodeKode和DelledningsID的组合,可以唯一标识您的记录。所以在子查询中你应该有两个条件,一个在DelledningsID上,另一个在SaneringsmetodeKode上。 试试这个:

INSERT INTO NySaneringsData (DelledningsID, SaneringsmetodeKode )
SELECT SaneringsprojektImport.DelledningsID, SaneringsprojektImport.SaneringsmetodeKode
FROM SaneringsprojektImport 
WHERE NOT EXISTS
(
SELECT * 
FROM NySaneringsData 
WHERE NySaneringsData.SaneringsmetodeKode = SaneringsprojektImport.SaneringsmetodeKode
AND NySaneringsData.DelledningsID = SaneringsprojektImport.DelledningsID
);

答案 1 :(得分:1)

为什么不

SELECT 
  CASE 
     WHEN VALUE1 = VALUE2 THEN RESULT_VALUE1 
     WHEN VALUE1 = VALUE3 THEN RESULT_VALUE2
     ELSE RESULT_VALUE3
  END as DelledningID
WHERE xxxx

即使在WHERE,ORER或GROUP BY子句中也可以使用CASE。

但是,查看查询,您是否还在寻找类似UPSERT的查询?

此致

橡树

答案 2 :(得分:1)

我没有尝试过访问,但这是标准的sql,应该可以工作:

INSERT INTO NySaneringsData ( DelledningsID, SaneringsmetodeKode )
SELECT DelledningsID, SaneringsmetodeKode
FROM SaneringsprojektImport WHERE DelledningsID NOT IN
(SELECT DelledningsID FROM NySaneringsData)

HTH

乔纳森

答案 3 :(得分:1)

试试这个:

if (Select ID from table1 Where Code = 'Something') IS NULL
INSERT INTO table1(ID, Code, Description)
Values (.., 'SomeCode', 'Some Description')

OR

if (Select ID from table1 Where Code = 'Something') IS NULL
INSERT INTO table1(ID, Code, Description)
Select ID, Code, Description form table2 
where SomeCondition