我有一个属性值表,如下所示,我知道只有一个* _value字段包含一个值,其他字段将为NULL。
仅选择非空值的列的最有效方法是什么?
我试过了
SELECT property_id, COALESCE(int_value, str_value, etc)
但这不起作用,因为它们是不同的列类型,类似于NULLIF。我可以投出所有值,但我不想丢失值类型。
property_values
-----------------------------------------------
property_id | integer
int_value | integer
str_value | character varying
time_value | timestamp without time zone
txt_value | text
dec_value | numeric
bool_value | boolean
json_value | jsonb
答案 0 :(得分:0)
评论太长了。
你不能做你想做的事,至少"合理地"。如您所知,由于类型冲突,coalesce()
无法正常工作。这接近问题的根源:结果集中的列必须具有特定类型。
那么,您希望结果是什么类型的?你可以决定一个普遍的"类型,例如字符串。我不确定这对你的用例是个好主意。