我正在使用Postgres,并且具有以下SQL语句:
SELECT *
FROM "osmlocal-dsd-de".t_osm_vehicle_image t
WHERE t.vehicle_config_id = 3
and image_type_id = 2
哪个返回一行:
id vehicle_config_id cosy_url image_type_id
113 3 SomeValue 2
当我运行以下命令时:
SELECT * from "osmlocal-dsd-de".t_osm_vehicle_image t
WHERE t.vehicle_config_id = 3
and image_type_id = 2
and coalesce(t.cosy_url, '') = ''
返回零行。
我认为我对coalesce
的理解是错误的,因为我希望还可以返回一行,因为cosy_url
不是null
。
任何对我做错事的建议都会受到赞赏。
答案 0 :(得分:3)
您似乎误会了coalesce()
。它返回的第一个值不是null
。
您的情况是:
coalesce(t.cosy_url, '')
因为t.cosy_url具有一个值('SomeValue'
),所以该值等于该值。该值不是''
,因此表达式返回false,整个where
子句返回false。
如果您想要非NULL
值,请使用:
t.cosy_url is not null
答案 1 :(得分:3)
您对合并的理解是错误的
它返回不为空的第一个参数。如果所有参数都为null,则COALESCE函数将返回null
在您的情况下,t.cosy_url
不为空,它等于SomeValue
,并且您的条件不起作用,因为SomeValue
不等于''