我的Specialization表的主键很复杂,由两列组成:Specialization_id和Specialty_id(这是Specialty表的外键)。 我将通过创建现有专业的新SPECIAL化来进行插入查询。 我已经在我的表中有一些特殊化,id = 1的一个专业的主键看起来像(1,1)(2,1),id = 2看起来像(1,2)(2,2)。 现在我要添加一个新的Specialization to Specialization表,但是这个Specialization应该引用现有的Specialty。 我的想法是
select t1.*
from table1 t1
where t1.status = 'Error1' and
not exists (select 1
from table1 tt1
where tt1.importid = t1.importid and tt1.linenumber = t1.linenumber and
tt1.status = 'Success'
);
我已尝试过''条款,没有它,仍然,我收到错误。 我该怎么办?
答案 0 :(得分:2)
在像MySQL或ORACLE这样的数据库中,您不应该以编程方式递增主键。相反,您应该在设计数据库时将字段设置为AUTOINCREMENT
。
这会将您的INSERT
声明更改为:
INSERT INTO Specialization (Specialization_name, Specialty_id)
VALUES('Network technologies', '2')
这不仅更容易,而且更安全。
编辑添加:您确定Specialty_id
是字符串吗?我认为这将是某种数字。
答案 1 :(得分:1)
您的主要错误是引号,因为您的子查询被引用它将被处理为字符串而不是查询。
此外,如果您没有主查询,则不需要使用子查询:
INSERT INTO Specialization ( Specialization_name, Specialization_id, Specialty_id )
SELECT 'Network technologies' As a, Max(Specialization_id)+1 As b, 2 As c
FROM Specialization WHERE Specialty_id = 2
然而,就像dstudeba所说,依靠自动编辑来创建新ID可能更聪明。