我的Postgres数据库中有2个表。他们每个人都有一个URL列,我想查询并返回第一个非空值。表
test1
id name url
test2
id address url
我有id
输入。如何编写查询以合并任何ID的最新可用URL?
test 1
ID name url
1 A null
2 B abc.com
3 C xyz.com
test 2
ID address url
1 X return.com
2 Y null
3 Z efg.com
合并后,我期望return.com将被返回。id = 1
最新可用URL表示第一个非空条目。
从注释中很难确定“最新”和“第一”的含义,因为COALESCE
不知道如何区分(基本上,您必须定义优先级)。如果您的示例使用return.com
,则正确的语法为:
SELECT COALESCE(b.url,a.url) FROM test_1 a JOIN test2 a ON a.id=b.id WHERE a.id=1
因此,在此示例中,b.url
只要不为空,您将始终显示。如果您希望它动态地确定优先级a.url
并b.url
基于一些基于时间的条件,则需要编写一个plpgsql
函数或进行一些复杂的数组嵌套和字符串连接(或者我想在这里看到其他专家炫耀他们的作品)
披露:我为EnterpriseDB(EDB)工作
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句