子查询返回null时抛出异常



我有3个表;devices,floorsinfodevicesinfo都有floors的外键当我试图通过设备获取信息时,我使用以下查询:

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

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

那么,如果子查询返回null,是否有任何方法可以抛出异常?

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

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中没有设备,则不返回任何行。

我认为这满足了你的需要——区分这三种情况。

相关内容

  • 没有找到相关文章

最新更新