我有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
,我没有得到任何结果。当这种情况发生时,我不知道这是因为没有这样的设备还是没有适当的信息。
那么,如果子查询返回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
中没有设备,则不返回任何行。
我认为这满足了你的需要——区分这三种情况。