設備表ops_device_info中的終端號terminal_id值是以 'D'開頭的字符串,而終端表ops__terminal_info中的終端號terminal_id是8位字符串, 它們之間是通過device_id關聯的.
ops_device_info 1-->n ops_terminal_info
現在希望將設備表中的終端號更改為終端表中的終端號.
終端狀態 4代表移機 5代表調試 6代表暫停 7代表啟用 8代表報廢 9代表停用
方式一:
update ops_device_info d set d.terminal_id = (select t.terminal_id from ops_terminal_info t where t.device_id=d.device_id and d.terminal_id like 'D%' and t.terminal_state not in ('8','9')) where exists (select t.terminal_id from ops_terminal_info t where t.device_id=d.device_id and d.terminal_id like 'D%' and t.terminal_state not in ('8','9'));
方式二:
merge into OPS_DEVICE_INFO t1 using OPS_TERMINAL_INFO t2 on (t1.device_id = t2.DEVICE_ID and t2.TERMINAL_STATE not in ('8','9')) when matched then Update set t1.TERMINAL_ID = t2.TERMINAL_ID where t1.terminal_id like 'D%';
SQl執行過程中如果出現 '單行子查詢返回多行記錄',那可能是你的數據本身有點重復。; 可以使用 我的另一個sql查詢一下重復數據 http://www.cnblogs.com/yangw/p/4088086.html .