MySQL中將A表中的字段值賦值給B表中的字段


  在工作中設計到一些字段值的初始化,特別是生產系統中添加字段時處理歷史數據的初始化,往往需要更新字段值,這里說說將A表中的字段值賦值給B表中的字段的幾種更新方法。

  1、通過子查詢實現

UPDATE tableA a
SET a.column1 = (
    SELECT
        b.column1
    FROM
        tableB b
    WHERE
        a.id = b.aid
),
 a.column2 = (
    SELECT
        b.column2
    FROM
        tableB b
    WHERE
        a.id = b.aid
)
WHERE
    EXISTS (
        SELECT
            1
        FROM
            BtableB c
        WHERE
            a.id = c.aid
    );

 

  2、通過逗號操作符的內連接

UPDATE tableA a,
 tableB b
SET a.column1 = b.column1,
 a.column2 = b.column2
WHERE
    a.id = b.aid;

  3、各種內、外連接都可以實現

UPDATE tableA a
LEFT JOIN tableB b ON a.id = b.aid
SET a.column1 = b.column1,
 a.column2 = b.column2;

 

  4、SQL允許的各種連接,並根據CASE函數控制不同類型數據更新不同的值

UPDATE system_alarm s LEFT JOIN (
SELECT a.id aid,
(
CASE a.alarm_type
WHEN '1' THEN d.p1_min
WHEN '2' THEN d.p1_max
WHEN '5' THEN d.p2_min
WHEN '6' THEN d.p2_max
ELSE 0
END
) AS num
 FROM system_alarm a LEFT JOIN device d ON a.device_id=d.device_id
) aaa
 ON s.id=aaa.aid
SET s.threshold=aaa.num;

 

  這里沒有用偽SQL,因為結合實際業務更好理解,大概說一下這條SQL的實際業務邏輯:設備的報警表中添加了新的字段:threshold(閾值),用來保存報警時的閾值,需要根據不同的報警類型把歷史報警的對應閾值放入新字段中,這里統一把當前的設備閾值保存到新字段,因修改過閾值而產生的不合理數據另外進行針對性的處理。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM