【问题标题】:insert data from one table to another in sql which already do not exist在sql中将数据从一个表插入到另一个表中已经不存在
【发布时间】:2016-09-15 00:21:50
【问题描述】:

我有一个表 xx_photo,我必须在其中插入来自 xx_people_ph 表的数据。

xx_photo :

IMAGE_ID   NOT NULL NUMBER(15)   
PARENT_ID  NOT NULL NUMBER(15)   
TABLE_NAME NOT NULL VARCHAR2(30) 
IMAGE      NOT NULL BLOB         
DATA_FLAG           VARCHAR2(2)  
HIST_DATE           DATE 

每当我们将数据插入 xx_photo 时,hist_date 将更新为 sysdate,data_flag 将更新为“Y”。

xx_people_ph

IMAGE_ID   NOT NULL NUMBER(15)   
PARENT_ID  NOT NULL NUMBER(15)   
TABLE_NAME NOT NULL VARCHAR2(30) 
IMAGE      NOT NULL BLOB 

我现在正在使用:

insert into xx_photo
SELECT IMAGE_ID ,
  PARENT_ID ,
  Table_Name ,
  Image ,
  'Y',
  Sysdate
FROM Per_Images Img_Tab;

In this statement only , i want to check if the record for same parent_id exists 

在 xx_photo 中。如果它已经存在,那么数据不应该被插入到这个表中。

如何修改此查询以仅插入 xx_photo 表中已不存在的记录

【问题讨论】:

  • 找到存在的唯一组合是什么
  • parent_id 与 xx_people_ph image_id 有什么关系?如果它不存在你想要发生什么,只是不插入记录抛出错误,为你插入它?如果您只想在父项不存在时停止插入,一种方法是使用 INNER JOIN 来查看它是否存在
  • 两个 parent_id 在两个表中都是唯一的 id

标签: sql insert oracle-sqldeveloper


【解决方案1】:

使用Not Exists

INSERT INTO xx_photo (Col1,col2,...)
SELECT image_id, 
       parent_id, 
       table_name, 
       image, 
       'Y', 
       sysdate 
FROM   per_images Img_Tab 
WHERE  NOT EXISTS (SELECT 1 
                   FROM   xx_photo x 
                   WHERE  x.parent_id = Img_Tab.parent_id) 

【讨论】:

  • 谢谢!!完美!
猜你喜欢
  • 2014-02-02
  • 2020-05-22
  • 1970-01-01
  • 1970-01-01
  • 2019-02-12
  • 1970-01-01
  • 1970-01-01
  • 2020-09-28
  • 1970-01-01
相关资源
最近更新 更多