子查询返回空时抛出异常

时间:2021-01-21 14:39:37

标签: sql postgresql subquery

我有 3 张桌子; devicesfloorsinfodevicesinfo 都有指向 floors 的外键 当我尝试通过设备获取信息时,我使用以下查询:

SELECT field1, field2 FROM info 
WHERE info.floor_id = (SELECT floor_id FROM devices WHERE device_uuid = "foo")

如果没有这样的设备,子查询变成NULL,我没有得到任何结果。发生这种情况时,我不知道是因为没有这样的设备还是没有适当的信息。

如果子查询返回空值,有没有什么办法可以像抛出异常一样?

1 个答案:

答案 0 :(得分:2)

您可以使用以 LEFT JOIN 表开头的 devices

SELECT i.field1, i.field2, d.floor_id
FROM devices d LEFT JOIN
     info i 
     ON i.floor_id = d.floor_id
WHERE d.device_uuid = 'foo'

返回什么?

  • 如果表之间存在匹配,则返回第三列非 NULL 的行。
  • 如果 devices 中有设备,但 info 中没有匹配项,则返回一行,其中前两列为 NULL
  • 如果 devices 中没有设备,则不返回任何行。

我认为这可以满足您的需要——区分这三种情况。

相关问题