我有一个查询,如果满足特定条件,我希望从一个表中获取数据并将其插入到另一个表中-

第一个表(TEMP_DAY_TABLE)包含列:EMP_ID_FK、TIME_ID_FK、HUTHES、DESCRIPTION、DAY-它没有索引,也没有键-它本质上是一个临时表,在执行INSERT INTO查询后,所有数据都将在其中被删除.

第二个表(EMP_TIME)包含以下列:EMP_ID_FK、TIME_ID_FK、HOURS、DATE_TIME、EMP_TIME_DESC.主键由EMP_ID_FK、TIME_ID_FK和DATE_TIME组成.

该查询的目的是,如果‘小时’中存在值并且主键的值不存在,则将TEMP_DAY_TABLE中的所有值插入到EMP_TIME中.

查询似乎按预期工作,但是当它执行时,我得到一个弹出的错误消息,内容如下:

员工时间不能追加追加查询中的所有记录.

由于类型转换失败,员工时间将0字段(S)设置为空,并且没有向表中添加4条记录(S),4条记录(S),0条记录(S),因为违反有效性规则.

是否仍要运行操作查询?

具体地说,它指示查询由于键冲突而没有将(#)记录添加到表中-错误消息提供了忽略错误并无论如何运行查询的选项,当这样做时,查询会按预期执行,并且不会在结尾表(EMP_TIME)中产生任何重复项-我不明白如果查询没有try 插入主键副本,我为什么会得到键冲突.它正在try 插入部分主键(即EMP_ID_FK)的副本,但不是整个键-我确信我遗漏了一些东西,因为我的SQL&A;Access冒险仍处于早期阶段,只是希望解决该错误.

下面是正在执行的查询:

INSERT INTO EMP_TIME ( EMP_ID_FK, TIME_ID_FK, Hours, Date_Time, EMP_TIME_Desc )
SELECT t.Emp_ID_FK, t.Time_ID_FK, t.Hours, t.Day, t.Description
FROM Temp_Day_Table t

left join EMP_TIME on t.EMP_ID_FK = EMP_TIME.EMP_ID_FK
and t.Time_ID_FK = EMP_TIME.TIME_ID_FK
and t.Day = EMP_TIME.Date_Time

where t.Hours <> 0;

同样,查询似乎按预期运行,但Access抛出了一个键冲突错误,我不确定确切原因.

先谢谢你.

推荐答案

使用NOT EXISTS作为密钥判断,将这两个条件分开:

INSERT INTO EMP_TIME ( EMP_ID_FK, TIME_ID_FK, Hours, Date_Time, EMP_TIME_Desc )
SELECT t.Emp_ID_FK, t.Time_ID_FK, t.Hours, t.Day, t.Description
FROM Temp_Day_Table t
WHERE NOT EXISTS (
  SELECT 1
  FROM EMP_TIME x
  WHERE t.EMP_ID_FK = x.EMP_ID_FK
  AND t.Time_ID_FK = x.TIME_ID_FK
  AND t.Day = x.Date_Time
)
AND t.Hours <> 0

Sql相关问答推荐

Oracle SQL中的累计总数

返回包含列和包含其他列的列表的自定义查询

仅在特定字符串之后提取两个圆括号之间的计量单位文本

按分隔符和总和分析字符串

按日期时间(不包括秒)连接表

使用列表作为参数进行 Select ,如果为空,则在PostgreSQL中不使用参数进行 Select

数组列的postgres更新查询

多条件SQL排序行为

如何将insert语句重复n次使一个值递增?

如何使用jsonn_populate_record()插入到包含IDENTITY列的表中

用替代方案替换 SQL Cursor 以提高性能

Postgresql:在链接表中判断相关表中插入值的条件

删除每个不同日期中未 Select 的最短最长时间

SQL:无重复项的两个聚合函数

使用ALTER TABLE无法删除列

查询以查找今天和昨天的数据之间的差异以及伪列

如何在 DAX 中通过 Window 函数应用订单

如何根据某个值在where子句中添加某个条件

As400 (IBM i) SQL 表 QSYS2.SYSTABLES 上的元数据

根据条件列出不同的值