SQL Coalesce不返回任何行

时间:2018-07-24 10:58:14

标签: sql postgresql

我正在使用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

任何对我做错事的建议都会受到赞赏。

2 个答案:

答案 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不等于''