子查询 returns null 时抛出异常

Throwing exception when subquery returns null

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

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

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

如果子查询 returns 为空,有什么方法可以抛出异常吗?

您可以使用 LEFT JOIN 开头 devices table:

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'

这是什么return?

  • 如果 table 之间存在匹配项,则它 return 具有非 NULL 第三列的行。
  • 如果 devices 中有设备,但 info 中没有匹配项,则它 return 是一行,前两列为 NULL
  • 如果 devices 中没有设备,则 return 没有行。

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