【问题标题】:How to Insert new Record into Table if the Record is not Present in the Table in Teradata如果 Teradata 的表中不存在记录,如何将新记录插入表中
【发布时间】:2020-12-31 00:50:38
【问题描述】:

如果表中没有记录,我想插入一条新记录

为此,我在 Teradata 中使用以下查询

 INSERT INTO sample(id, name) VALUES('12','rao')
 WHERE NOT EXISTS (SELECT id FROM sample WHERE id = '12'); 

当我执行上述查询时,出现以下错误。

 WHERE NOT EXISTS
 
Failure 3706 Syntax error: expected something between ')' and the 'WHERE' keyword.

任何人都可以帮助解决上述问题。这将非常有帮助。

【问题讨论】:

标签: sql teradata


【解决方案1】:

你可以使用INSERT INTO ... SELECT ...如下:

INSERT INTO sample(id,name)
 select '12','rao'
   WHERE NOT EXISTS (SELECT id FROM sample WHERE id = '12');

您还可以在id 列上创建primary/unique 键以避免在id 列中插入重复数据。

【讨论】:

    【解决方案2】:

    我建议将查询编写为:

    INSERT INTO sample (id, name)
       SELECT id, name
       FROM (SELECT 12 as id, 'rao' as name) x
       WHERE NOT EXISTS (SELECT 1 FROM sample s WHERE s.id = x.id);
    

    这意味着您不需要重复常量值——这样的重复可能会导致查询出错。请注意,我删除了单引号。 id 看起来像一个数字,所以将其视为一个数字。

    ids 的唯一性通常使用唯一约束或索引来处理:

    alter table sample add constraint unq_sample_id unique (id);
    

    这确保数据库 确保唯一性。如果两个 inserts 使用相同的 id 同时运行,您的方法可能会失败。尝试插入重复项会返回错误(exists 可以避免这种情况)。

    实际上,id 列通常由数据库自动生成。所以create table 语句看起来更像:

    id integer generated by default as identity
    

    插入看起来像:

    insert into sample (name)
        values (name);
    

    【讨论】:

      【解决方案3】:

      如果id 是表的主索引,您可以使用MERGE

      merge into sample as tgt 
      using VALUES('12','rao') as src (id, name)
      on src.id = tgt.id
      when not matched
      then insert (src.id,src.name)
      

      【讨论】:

        猜你喜欢
        • 2021-11-14
        • 2021-09-03
        • 2018-12-26
        • 2014-03-08
        • 1970-01-01
        • 1970-01-01
        • 2013-09-22
        • 1970-01-01
        • 2019-06-23
        相关资源
        最近更新 更多