亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

SQL:從可能在另一個表中的列中獲取值

SQL:從可能在另一個表中的列中獲取值

瀟瀟雨雨 2022-01-18 16:23:04
我正在工作中進行重構,并將一列從一個表移到另一個表。有一個表格代表一個架子static.connected_shelf(上面有 iot 設備),還有一個表格代表 devices static.iot_devices?,F在,有新設備未安裝在架子上,因此必須將屬性iot_device_type_fk從static.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_fk在static.iot_devices. 我如何確保如果該表中不存在該列,我將從中獲取它static.connected_shelf?
查看完整描述

1 回答

?
MMMHUHU

TA貢獻1834條經驗 獲得超8個贊

我希望值在兩個表中,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_fk

WHERE 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_fk

WHERE i.pk = %(device_id)s

子查詢將iot_device_type_fk首先查找 iniot_devices然后 in connected_shelf。


查看完整回答
反對 回復 2022-01-18
  • 1 回答
  • 0 關注
  • 203 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號