【发布时间】:2018-07-04 20:17:03
【问题描述】:
使用 DB2 9.7.5,我有两个表,主表和导入表。每小时我都会得到一个插入到导入表中的数据转储。然后我将导入表中的记录合并到主表中。为了区分主表中的现有记录,所有记录的时间戳都精确到秒。
两个表都是这样定义的:
CREATE TABLE ... (
STATUS VARCHAR(1000) NOT NULL,
ACTION_DATE TIMESTAMP NOT NULL
) IN SOME_TABLE_SPACE;
在将导入表合并到主表之前,我删除了导入表中的现有记录。
DELETE FROM IMPORTING
WHERE (ACTION_DATE) IN
(SELECT ACTION_DATE FROM MASTER);
导入表中的唯一记录应该是新记录,因此我将导入表中的记录插入到主表中。
INSERT INTO MASTER (STATUS, ACTION_DATE)
SELECT STATUS, ACTION_DATE FROM IMPORTING;
我不时遇到的问题是我得到重复记录,因为 ACTION_DATE 有时在主表和导入表之间最多相差 2 秒
那么如何从导入表中删除主表中时间戳偏移量为 2 秒的记录?
【问题讨论】:
-
与此无关,您看过 MERGE 语句吗?
-
@data_henrik 一个 MERGE 对相等起作用不是吗?
-
你如何确定它们是重复的?您是否应该使用代理键或自然键进行合并?
-
无论您使用什么来确定它们是重复的,都应该是您的 Delete 语句用来将它们从导入表中删除的内容。
-
@Wes H 和毛,ACTION_DATE 有点像一个键,但有时相同的记录会重复,因为 ACTION_DATE 关闭了几秒钟。我正在考虑使用 SECONDS 函数并确定差异是否在 2 以内,那么它们将是相同的。我只是不知道如何在删除中实现它。
标签: database insert timestamp db2 db2-luw