附加查询错误

问题描述 投票:0回答:2

我的Specialization表的主键很复杂,由两列组成:Specialization_id和Specialty_id(这是S​​pecialty表的外键)。我将通过创建现有专业的新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');

我试过''条款,没有它,仍然,我得到错误。我该怎么办?

sql database ms-access insert
2个回答
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所说的那样,依靠autonumbers创建新的ID可能更聪明。


2
投票

在像MySQL或ORACLE这样的数据库中,您不应该以编程方式递增主键。相反,您应该在设计数据库时将字段设置为AUTOINCREMENT

这会将你的INSERT声明改为:

 INSERT INTO Specialization (Specialization_name, Specialty_id)
 VALUES('Network technologies', '2')

这不仅容易得多,而且更安全。

编辑添加:你确定Specialty_id是一个字符串?我认为这将是某种数字。

© www.soinside.com 2019 - 2024. All rights reserved.