我正在使用数据库中的两个表,其中第一个表(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,那么我得到正确的行数。
有人可以告诉我我做错了什么。
答案 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;