oracle选择是否不存在插入

时间:2019-10-06 13:22:42

标签: sql oracle select insert

假设我有一个包含两列b和c的表A。我想获取一个特定的值,如果它不存在,则将其初始化为零。像这样:

if  exists (select c from A where b=1) 
{return  (select c from A where b=1)}
else
{ (insert into A values(1,0)) return 0}

是否可以在一条语句中完成全部操作?

1 个答案:

答案 0 :(得分:1)

因此,您想要一个语句(或在更大的语句中使用的片段),该语句将返回c的值,其中b = 1,或者如果没有行等于b = 1,则返回0。

如果有几行,其中b = 1,您想返回什么?如果您的数据中有可能,那么您的问题就没有多大意义了。因此,对于以下答案,我认为b列中可能没有没有重复内容。 (或者,确切地说,b列没有重复是没有必要的;但是 很有必要使值1在该列中出现不超过一次。)

Presto

将返回一个值:如果表A中有一行,其中b = 1,它将返回对应的c。如果没有b = 1的行,则“标量子查询”(内部SELECT)将返回NULL。如果第一个参数为NULL,则NVL返回其第二个参数(否则它将返回第一个参数)。

现在,严格来说,此解决方案不是100%正确的。如果表A中有一行,且b = 1并且c为NULL,那么也许您想返回NULL,而不是0。您将需要弄清楚c是否可以为NULL,如果可以的话,您将如何处理。 (如果您也想在这种情况下返回0,则上述解决方案是100%正确的。)

相关问题