我的Specialization表的主键很复杂,由两列组成:Specialization_id和Specialty_id(这是Specialty表的外键)。我将通过创建现有专业的新SPECIAL化来进行插入查询。我已经在我的表中有一些特殊化,id = 1的一个专业的主键看起来像(1,1)(2,1),id = 2看起来像(1,2)(2,2)。现在我要添加一个新的Specialization to Specialization表,但是这个Specialization应该引用现有的Specialty。我的想法是
INSERT INTO Specialization ( Specialization_name, Specialization_id, Specialty_id )
VALUES( 'Network technologies','(SELECT Max(Specialization_id) FROM Specialization WHERE Specialty_id = '2')+1', '2');
我试过''条款,没有它,仍然,我得到错误。我该怎么办?
您的主要错误是引号,因为您的子查询被引用它将被处理为字符串而不是查询。
此外,如果您没有主查询,则不需要使用子查询:
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所说的那样,依靠autonumbers创建新的ID可能更聪明。
在像MySQL或ORACLE这样的数据库中,您不应该以编程方式递增主键。相反,您应该在设计数据库时将字段设置为AUTOINCREMENT
。
这会将你的INSERT
声明改为:
INSERT INTO Specialization (Specialization_name, Specialty_id)
VALUES('Network technologies', '2')
这不仅容易得多,而且更安全。
编辑添加:你确定Specialty_id
是一个字符串?我认为这将是某种数字。