我一直在StackOverflow、SQLite.com和Google上寻找帮助,但是还没有找到我想要的。
我需要将两个旧表合并到一个新表中,但是主键和唯一约束似乎在相互冲突(一旦到达INSERT语句,我将得到一个约束失败错误)。如果删除唯一约束,脚本将运行,但随后会有重复的CamIndex记录。

CREATE TABLE tmpTable(
RowID      INTEGER   PRIMARY KEY AUTOINCREMENT,
CamIndex   INTEGER   UNIQUE NOT NULL,
LenIndex   INTEGER   NOT NULL,
CamDesc    TEXT,
LenDesc    TEXT
);

INSERT INTO tmpTable(
CamIndex,
LenIndex,
CamDesc,
LenDesc
)

SELECT
TblA.CAM_INDEX,
TblB.LEN_INDEX,
TblA.CAM_DESC,
TblB.LEN_DESC

FROM TblA
LEFT JOIN TblB on TblA.CAM_INDEX = TblB.CAM_INDEX;

如何使CamIndex列唯一并将RowID保留为主键?
这也不管用:
CREATE TABLE tmpTable(
RowID      INTEGER   PRIMARY KEY AUTOINCREMENT,
CamIndex   INTEGER   NOT NULL,
LenIndex   INTEGER   NOT NULL,
CamDesc    TEXT,
LenDesc    TEXT,
UNIQUE(CamIndex)
);

我使用的是SQLite,因此无法使用ALTER Table语句添加唯一约束。

最佳答案

你关于数据唯一性的假设是无效的。根据您在评论中的评论,您的SELECT语句的结果对于CamIndexLenIndexCamDesc的不同组合产生相同的LenDesc。因此,不能对CamIndex设置唯一约束。
在约束表之前,您需要重新评估SELECT查询,以确保不会从中获取虚假值。

07-22 07:03