在表中插入包含总记录的字段的新记录

时间:2016-05-26 12:12:21

标签: sql

我想知道它是否存在一个函数,它允许我获取表的总记录数,以便将新记录插入表中?

我有这张桌子:

CREATE TABLE "TEST" 
   (    "NAME" VARCHAR2(20 BYTE), 
    "ID" NUMBER,
  "FLAG" NUMBER
   )  ;
Insert into TEST (NAME,ID,FLAG) values ('Ahlahslfh',1,1);
Insert into TEST (NAME,ID, FLAG) values ('Buoiuop',2,1);
Insert into TEST (NAME,ID, FLAG) values ('UOIP',12,0);

enter image description here

我的意图是发表一个与此相同的陈述:

INSERT INTO TEST(  NAME,  ID, FLAG )
  VALUES( 'TST', 3,1 );

我在下面使用的语句生成了错误:

INSERT INTO TEST (  NAME,  ID, FLAG )
  VALUES ( 'TST', SELECT COUNT(*)+1 FROM TEST WHERE FLAG=1,1 );

以下是我期待的最终结果:

enter image description here

周围有办法吗?当然,我可以将它们放在脚本中,将记录计入变量并将该变量插入到字段中。我只是想知道是否有更优雅的解决方案并在1个声明中执行此操作。

谢谢!

1 个答案:

答案 0 :(得分:3)

这可能是设置id的非常糟糕的方法。一般来说,我认为你应该使用序列/身份/ auto_increment而不用担心差距。

但是,你可以使用括号做你想做的事 - 子查询需要这些:

INSERT INTO TEST(NAME, ID, FLAG)
    VALUES ('TST', 
            (SELECT COUNT(*)+1 FROM TEST WHERE FLAG = 1), 
            1 
           );

或者,或者:

INSERT INTO TEST(NAME, ID, FLAG)
    SELECT 'TST', COUNT(*) + 1, 1
     FROM TEST
     WHERE FLAG = 1;

我必须强调这似乎很危险。你很可能会得到重复的id。你应该让数据库插入一个新值而不用担心差距。