sql Oracle:仅当值存在时才从另一个表插入值

时间:2019-07-19 15:40:57

标签: sql oracle

仅当从table2返回的值不为null时,我才想在table1中插入来自另一个table2的值

我想要这样的东西

  INSERT INTO TABLE1
                ( IMG_CODE, NAME, AMOUNT) 
                VALUES ((SELECT MAX(IM_CODE)  FROM IMAGE  WHERE imf_file_name = 'dfkdf4564654.jpg'), 'Meal', 154 )
                WHERE  ((SELECT MAX(IMF_CODE) FROM IMAGE  WHERE imf_file_name = 'dfkdf4564654.jpg') IS NOT NULL);

此请求引发错误ORA-00933-“ SQL命令未正确结束”

你知道怎么做吗?

/

2 个答案:

答案 0 :(得分:2)

您可以使用嵌套子查询来做到这一点:

INSERT INTO TABLE1(IMG_CODE, NAME, AMOUNT) 
SELECT t.IM_CODE, 'Meal', 154
FROM (
  SELECT MAX(IM_CODE) IM_CODE FROM IMAGE  
  WHERE imf_file_name = 'dfkdf4564654.jpg'
) t
WHERE t.IM_CODE IS NOT NULL

如果MAX(IM_CODE)NULL,则不会插入该行。

答案 1 :(得分:1)

怎么样?

INSERT INTO TABLE1 ( IMG_CODE, NAME, AMOUNT) 
    SELECT MAX(IM_CODE), 'Meal', 154 
    FROM IMAGE  
    WHERE imf_file_name = 'dfkdf4564654.jpg'
    GROUP BY imf_file_name;

这有点微妙。如果没有任何与GROUP BY不匹配的查询,则仅返回一个带有NULL值的行。但是,对于GROUP BY,仅返回匹配的组。因此,如果没有行,则不会插入任何内容。

此方法的优点是可以轻松扩展到多个文件名。