猿问

SQL:从可能在另一个表中的列中获取值

我正在工作中进行重构,并将一列从一个表移到另一个表。

有一个表格代表一个架子static.connected_shelf(上面有 iot 设备),
还有一个表格代表 devices static.iot_devices

现在,有新设备未安装在架子上,因此必须将属性iot_device_type_fkstatic.connected_shelf移至static.iot_devices

为了防止在尝试访问此属性时出现竞争条件,我需要修改我的查询,因此当它在其中搜索设备类型static.iot_devices但该列不存在时(在该环境中尚未发生重构),测试不会失败,而是返回static.connected_shelf并从那里获取价值。

下面是一个非常简单的查询示例:

    query = """SELECT c.pk connected_shelf_fk, i.iot_device_type_fk  device_type_fk, i.pk device_fk
               FROM static.connected_shelf c
               JOIN static.iot_devices i ON c.pk = i.connected_shelf_fk
               WHERE i.pk = %(device_id)s"""
    cursor.execute(query, {'device_id': device_id})

所以在这里,我已经修改了查询,所以它iot_device_type_fkstatic.iot_devices. 我如何确保如果该表中不存在该列,我将从中获取它static.connected_shelf


潇潇雨雨
浏览 164回答 1
1回答

MMMHUHU

我希望值在两个表中,NULL表中的值尚未分配。如果是这样:SELECT c.pk as connected_shelf_fk,       COALESCE(i.iot_device_type_fk, c.connected_shelf) as iot_device_type_fk,       i.pk as device_fk,FROM static.connected_shelf c JOIN     static.iot_devices i     ON c.pk = i.connected_shelf_fkWHERE i.pk = %(device_id)s如果该列确实不存在,您可以执行以下操作:SELECT c.pk as connected_shelf_fk,       (SELECT iot_device_type_fk  -- no alias!        FROM static.iot_devices i2        WHERE i2.pk = i.pk       ) as iot_device_type_fk,       i.pk as device_fk,FROM static.connected_shelf c JOIN     static.iot_devices i     ON c.pk = i.connected_shelf_fkWHERE i.pk = %(device_id)s子查询将iot_device_type_fk首先查找 iniot_devices然后 in connected_shelf。
随时随地看视频慕课网APP

相关分类

Python
我要回答