1. 程式人生 > >用SQL來修復專案資料

用SQL來修復專案資料

維護工程管理系統時,由於功能上線的時間差,導致資料不同步的問題。具體來看,就是專案資訊中有合同簽訂的開始及結束時間,專案進度節點中的合同簽訂節點確沒有將狀態修改為已完成,並記錄完成時間。最後用SQL修復該問題。

涉及的表:

project_contract_subs 採購訂單表,這裡儲存有合同(採購訂單)的簽訂日期(signed欄位)

project_engineerings 單項工程表,從屬於採購訂單表

project_engineerings_nodes 單項工程節點表,從屬於單項工程表,從屬於單項工程節點型別表

project_node_types 單項工程節點型別,這裡儲存有『合同簽訂』節點,id是3,23

目標:

根據採購訂單表中的簽訂日期來更新單項工程節點表中,屬於合同簽訂型別的節點的開始及結束時間,並把完成標記置1.

UPDATE project_engineerings_nodes # 節點表
LEFT JOIN project_engineerings ON project_engineerings.id = project_engineerings_nodes.project_engineerings_id # 關聯單項工程
INNER JOIN project_contract_subs ON project_engineerings.project_contract_sub_id = project_contract_subs.id # 關聯採購訂單
SET project_engineerings_nodes.complete_start_date = project_contract_subs.signed, # 設定節點開始時間
 project_engineerings_nodes.complete_end_date = project_contract_subs.signed, # 設定節點結束時間
 project_engineerings_nodes.is_complete = 1 # 設定節點完成狀態
WHERE
	project_engineerings_nodes.project_engineerings_id IN ( # 得到已經簽訂採購訂單的單項工程
		SELECT
			project_engineerings.id
		FROM
			project_engineerings
		INNER JOIN project_contract_subs ON project_contract_subs.id = project_engineerings.project_contract_sub_id
		WHERE
			project_contract_subs.signed != ''
	)
AND project_engineerings_nodes.is_complete != 1 # 未完成節點
AND (
	project_engineerings_nodes.project_node_id = 3 # 常規專案單籤節點
	OR project_engineerings_nodes.project_node_id = 23 # 傳輸專案單籤節點 
)