我一直在寻找StackOverflow,SQLite.com和Google的帮助,但还没有找到我正在寻找的东西。
我需要将两个较旧的表组合成一个新表,但PRIMARY KEY和UNIQUE约束似乎互相争斗(一旦它到达INSERT语句,我得到一个Constraint Failed错误)。如果我删除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列设为UNIQUE并将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约束。
答案 0 :(得分:1)
您对数据唯一性的假设无效。根据您在评论中提到的内容,SELECT
语句的结果会针对CamIndex
,LenIndex
或CamDesc
的不同组合生成相同的LenDesc
。鉴于此,您无法在CamIndex
上添加唯一约束。
您需要重新评估SELECT查询,以确保在限制表格之前没有从中获取虚假值。