我正在使用 Postgres。
架構
------------ ----------- ---------------------
| employee | | contact | | powwowpersalmapping |
------------ ----------- ---------------------
| member_id | | member_id | | id_number |
| staff_code | | idnumber | | persal_number |
------------ ----------- ---------------------
資料

目標
正如你所看到的,staff_code是空白的,所以我試圖staff_code用employee桌子上的persal_number設定在powwowpersalmapping桌子上。
題
如何構造UPDATE查詢以將 復制persal_number到staff_code?

問題
我正在創建一個UPDATE查詢,但等效SELECT查詢非常慢,所以我認為UPDATE查詢也會很慢。
SQL
我有以下幾點:
如果我SELECT使用表連接運行此查詢。它運行得非常快。
SELECT e.* FROM employee e
INNER JOIN contact c ON c.member_id = e.member_id
INNER JOIN powwowpersalmapping m ON m.id_number = c.idnumber
WHERE e.staff_code is null or coalesce(e.staff_code, '') = '';
然后我SELECT用多個表運行這個查詢(沒有連接)。它運行得很慢。
SELECT e.* FROM employee e
, contact c, powwowpersalmapping m
WHERE c.member_id = e.member_id
AND m.id_number = c.idnumber
AND e.staff_code is null or coalesce(e.staff_code, '') = '';
所以我正在構建一個UPDATE查詢(還沒有運行),到目前為止有以下內容,但我相信它也會很慢。
UPDATE employee e
SET e.staff_code = m.persal_number
FROM contact c, powwowpersalmapping m
WHERE c.member_id = e.member_id
AND m.id_number = c.idnumber
AND e.staff_code is null or coalesce(e.staff_code, '') = '';
以下情況如何?
UPDATE employee e
SET e.staff_code = (
SELECT m.persal_number FROM employee e
INNER JOIN contact c ON c.member_id = e.member_id
INNER JOIN powwowpersalmapping m ON m.id_number = c.idnumber
WHERE e.staff_code is null or coalesce(e.staff_code, '') = ''
);
uj5u.com熱心網友回復:
您可以UPDATE在FROM子句后的陳述句中使用連接:
UPDATE employee e
SET staff_code = m.persal_number
FROM contact c INNER JOIN powwowpersalmapping m
ON m.id_number = c.idnumber
WHERE c.member_id = e.member_id AND COALESCE(e.staff_code, '') = '';
由于SELECT查詢運行得很快(我相信所有相關列都有索引)這也將運行得很快。
如果您也可以擺脫該COALESCE()功能,它會更快。
該列是否為staff_code空?如果是,則洗掉AND COALESCE(e.staff_code, '') = ''.
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/348289.html
標籤:sql PostgreSQL 加入 sql更新
上一篇:PostgreSQL是否只支持復制發布列的一個子集?
下一篇:瀏覽器播放rtsp視頻流解決方案
