【问题标题】:sql Oracle : Insert a value from another table only when value existssql Oracle:仅当值存在时才从另一个表中插入值
【发布时间】: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 命令未正确结束”

你知道怎么做吗?

/

【问题讨论】:

    标签: sql oracle


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

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

      【讨论】:

        猜你喜欢
        • 2013-09-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-26
        • 2014-04-29
        • 2016-01-13
        相关资源
        最近更新 更多