子查询 returns null 时抛出异常
Throwing exception when subquery returns null
我有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
,我得不到任何结果。发生这种情况时,我无法判断是因为没有这样的设备还是没有适当的信息。
如果子查询 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 没有行。
我认为这可以满足您的需求 -- 区分这三种情况。
我有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
,我得不到任何结果。发生这种情况时,我无法判断是因为没有这样的设备还是没有适当的信息。
如果子查询 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 没有行。
我认为这可以满足您的需求 -- 区分这三种情况。