SQL查询:获取T1中唯一设备的METADATA1,空值替换为DEVICEID
解决你的SQL查询需求
没问题,我帮你把这个SQL语句补全并解释清楚,刚好能满足你的需求:
SELECT DISTINCT t1.DEVICEID, COALESCE(NULLIF(t2.METADATA1, ''), t1.DEVICEID) AS METADATA1 FROM T1 LEFT JOIN T2 ON t1.DEVICEID = t2.DEVICEID;
下面给你拆解一下这段代码的逻辑:
LEFT JOIN:用左连接关联两张表,能保证T1里的所有设备记录都不会被过滤掉——哪怕某个设备在T2里没有对应信息,也能正常出现在结果里。NULLIF(t2.METADATA1, ''):先把空字符串转换成NULL,这样就能把空字符串和NULL这两种特殊情况统一处理,不用分开写复杂判断。COALESCE(...):这个函数会依次检查参数,返回第一个非NULL的值。这里就是如果METADATA1是空或者NULL,就返回对应的DEVICEID;如果METADATA1有有效内容,就返回原内容。DISTINCT:确保结果里每个DEVICEID只出现一次,完美匹配你要“所有唯一设备”的要求。
如果你的T2表中每个DEVICEID本身就是唯一的(没有重复记录),其实可以去掉DISTINCT,不过保留它更稳妥——毕竟T1里可能有大量同一设备的测量数据,去重后结果更干净。
内容的提问来源于stack exchange,提问作者Ashkan
相关产品推荐
相关产品推荐

