我有 3 张桌子; devices
、floors
和 info
。 devices
和 info
都有指向 floors
的外键
当我尝试通过设备获取信息时,我使用以下查询:
SELECT field1, field2 FROM info
WHERE info.floor_id = (SELECT floor_id FROM devices WHERE device_uuid = "foo")
如果没有这样的设备,子查询变成NULL
,我没有得到任何结果。发生这种情况时,我不知道是因为没有这样的设备还是没有适当的信息。
如果子查询返回空值,有没有什么办法可以像抛出异常一样?
答案 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'
返回什么?
devices
中有设备,但 info
中没有匹配项,则返回一行,其中前两列为 NULL
。devices
中没有设备,则不返回任何行。我认为这可以满足您的需要——区分这三种情况。