【问题标题】:Throwing exception when subquery returns null子查询返回null时抛出异常
【发布时间】:2021-01-21 14:39:37
【问题描述】:

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

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

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

那么如果子查询返回null,有什么方法可以抛出异常吗?

【问题讨论】:

    标签: sql postgresql subquery


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-22
      • 2012-06-08
      • 2017-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-27
      • 2010-12-05
      相关资源
      最近更新 更多