**已关闭。**此问题需要debugging details。当前不接受答案。
编辑问题以包含desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
9小时前关门了。
Improve this question
这里有一个简单的表,包含a
,b
,c
,d
列。如果c>0
,则d
中的值为a+b
;如果c<=0
,则a-b
。我该怎么做?
我试过这段代码,但它不起作用。我怎样才能动态地在表中插入数据?
INSERT INTO my_table VALUES(1,2,3,
CASE
WHEN c<0
THEN a+b
ELSE a-b
END
)
2条答案
按热度按时间8mmmxcuj1#
如果C〉0,我想得到D(a + b)的值,如果C〈= 0,我想得到(a-b)的值,我该怎么做呢?
您不能引用值中的列。相反,您需要重复这些值。假设您使用绑定参数在编程语言中发出查询...
也可以编写函数。
Demonstration.
cbeh67ev2#
使用文字值时,可以使用子查询实现相同的效果:
这无需对
integer
或text
等基本类型进行显式类型转换即可实现,因为假定的文本默认类型恰好匹配。您可能需要在单独的VALUES
表达式中对其他数据类型进行显式数据类型转换。请参见:INSERT
回归基本:附加列
d
可以廉价地在运行中计算,通常比由于增加的存储而读取更多数据页便宜得多:您可以将逻辑持久化在
VIEW
中:如果您确实需要计算值 * stored *(例如当计算相对昂贵时,或者您要对列执行其他操作时),请使用
STORED
generated column(Postgres 12+):fiddle
参见: