我一直在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
语句的结果对于CamIndex
、LenIndex
或CamDesc
的不同组合产生相同的LenDesc
。因此,不能对CamIndex
设置唯一约束。
在约束表之前,您需要重新评估SELECT查询,以确保不会从中获取虚假值。