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:仅当值存在时才从另一个表中插入值的主要内容,如果未能解决你的问题,请参考以下文章