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

Posted

技术标签:

【中文标题】sql Oracle:仅当值存在时才从另一个表中插入值【英文标题】:sql Oracle : Insert a value from another table only when value exists 【发布时间】:2019-07-19 15:40:57 【问题描述】:

我想在 table1 中插入一个来自另一个 table2 的值,只有当 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 命令未正确结束”

你知道怎么做吗?

/

【问题讨论】:

【参考方案1】:

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

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,则不会插入该行。

【讨论】:

【参考方案2】:

这个怎么样?

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,只会返回匹配的组。因此,如果没有行,则不会插入任何内容。

这种方法的优点是它很容易扩展到多个文件名。

【讨论】:

以上是关于sql Oracle:仅当值存在时才从另一个表中插入值的主要内容,如果未能解决你的问题,请参考以下文章

仅当两个表中都存在员工时才从临时表中更新员工 ID

仅当值不存在时才使用 lodash 推送到数组?

仅当值不存在时才返回行

仅当自动增量数据相等时才从另一个表列更新 mysql 列

仅当值不存在时才使用lodash push到数组?

仅当值存在于 SQL 的另一列中时,如何选择列的值?