附加查询错误

时间:2017-12-28 20:36:05

标签: sql database ms-access insert

我的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。 我的想法是

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'
                );

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

2 个答案:

答案 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可能更聪明。