我一直在 StackOverflow、SQLite.com 和 Google 上搜索以寻求帮助,但还没有找到我要找的东西。
我需要将两个旧表组合成一个新表,但 PRIMARY KEY 和 UNIQUE 约束似乎相互冲突(一旦进入 INSERT 语句,我就会收到约束失败错误)。如果我删除 UNIQUE 约束,该脚本将运行,但我有重复的 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 语句添加 UNIQUE 约束。
最佳答案
您关于数据唯一性的假设是无效的。根据您在评论中的评论,您的 SELECT
语句的结果针对 LenIndex
、CamDesc 的不同组合生成相同的
或 CamIndex
LenDesc
。鉴于此,您不能对 CamIndex
设置唯一约束。
您需要重新评估您的 SELECT 查询以确保在您可以约束您的表之前不会从中获取虚假值。
关于linux - 为什么我的 SQLite3 表中出现 UNIQUE Constraint Failure,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43123220/