【问题标题】:Insert new records in second table based on colums in first table根据第一个表中的列在第二个表中插入新记录
【发布时间】:2016-05-18 19:19:36
【问题描述】:

我是 oracle 的新手。我有两个表名为“st”和“mt”。“skey”是两个表的公共列。我想在“mt”中为所有“skey”值插入数据st”,除非“st”中的列名“tes”不等于“NOO”。

 INSERT INTO SDATA.MT(RECNO,Skey,Date)
 VALUES ((SELECT MAX(RECNO) FROM SDATA.ST)+1,'hari..',sysdate)
 where skey in (select skey from SDATA.ST where tes <> 'NOO')

获取错误报告 - SQL 错误:ORA-00933:SQL 命令未正确结束 00933. 00000 - “SQL 命令未正确结束”

【问题讨论】:

  • 你能提供样本数据和想要的结果吗?

标签: oracle oracle11g oracle10g oracle-sqldeveloper


【解决方案1】:

如果你的查询背后的逻辑是正确的,你只需要正确的语法:

INSERT INTO SDATA.MT(
                     RECNO,
                     Skey,
                     Date
                    )
    SELECT MAX(RECNO) + 1,
           'hari..',
           SYSDATE
      FROM C_WOMEN_PRD.MOSTATUS
     WHERE skey IN (SELECT skey
                      FROM SDATA.ST
                     WHERE tes <> 'NOO')

您需要 VALUES 关键字来插入固定值:

INSERT INTO SDATA.MT(
                         RECNO,
                         Skey,
                         Date
                        )
VALUES (1,
        'something',
        sysdate
       );

根据您表中的数据,也许您需要

WHERE skey NOT IN (SELECT skey
                          FROM SDATA.ST
                         WHERE tes = 'NOO')

而不是你的条件;但这只能说知道您的数据如何。

【讨论】:

  • 仍然错误 SQL 错误:违反唯一约束 (%s.%s)
  • 非常感谢..“不在”工作。非常有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-07
  • 2019-12-05
  • 1970-01-01
  • 2020-04-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多