使用COALESCE

时间:2018-03-26 14:43:23

标签: sql coalesce

我正在使用数据库中的两个表,其中第一个表(T1)由来自设备的测量值组成,而另一个表(T2)具有关于每个单独设备的信息。

在T2中有一个名为METADATA1的列,它可以是描述,空字符串或null。

我想编写一个查询,获取T1中测量的所有不同设备及其METADATA1。我想用deviceid替换空/ null元数据。这就是我所拥有的

SELECT DISTINCT(t1.DEVICEID), 
       COALESCE(NULLIF(t2.METADATA1,''), t1.DEVICEID) AS METADATA1 
FROM T1 t1 LEFT JOIN T2 t2 ON t1.DEVICEID = t2.DEVICEID 
ORDER BY t1.DEVICEID ASC

这将返回零行并且不起作用。如果我用COALESCE(NULLIF(t2.METADATA1,''), '0')替换COALESCE,那么我得到正确的行数。

有人可以告诉我我做错了什么。

1 个答案:

答案 0 :(得分:1)

假设t1有行,您的查询应返回行。我会使用GROUP BY而不是SELECT DISTINCT来表达它。

SELECT t1.DEVICEID,
       COALESCE(NULLIF(MAX(t2.METADATA1), ''), t1.DEVICEID) AS METADATA1 
FROM T1 t1 LEFT JOIN
     T2 t2
     ON t1.DEVICEID = t2.DEVICEID 
GROUP BY t1.DEVICEID
ORDER BY t1.DEVICEID ASC;