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;
我在数据库中使用两个 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;