sql 不同与合并

sql DISTINCT with COALESCE

我在数据库中使用两个 table,其中第一个 table (T1) 包含来自设备的测量值,另一个 table (T2) 包含信息在每个单独的设备上。

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

我想编写一个查询来获取在 T1 及其 METADATA1 中具有测量值的所有不同设备。我想用 deviceid 替换 empty/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

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

谁能告诉我我做错了什么。

假设 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;