1. 程式人生 > >SQL使用之關聯更新、批量插入

SQL使用之關聯更新、批量插入

覆蓋 end 微軟雅黑 family and right 同步 lock --

  • 使用場景

某個字段數據異常,利用另外一張表同步修改該表異常字段的數據;

  • 關聯更新

UPDATE tableName1 AS t1
LEFT JOIN tableName12 AS t2 ON t1.xx = t2.xx
SET t1.Col = ‘‘
WHERE
t1.Id = 147852
AND t2.`Name` <> ‘‘

當然,也可以使用Inner Join或者Right Join

在實際操作中,還有可能補入相關業務數據來保持數據完整,有以下兩種操作方式

  • 查詢生成數據

INSERT INTO email
SELECT UUID() AS Id,PlayerId AS PlayerId,‘00000000-0000-0000-0000-000000000000‘ AS SendPlayerId,‘系統‘ AS SendPlayerName,‘獎勵‘ AS SUBJECT, ‘恭喜獲得獎勵。‘ AS Content,0 AS EmailType,b‘0‘ AS IsReceive,‘110‘ AS Reward,NOW() AS SendTime,500 AS ModuleId,b‘0‘ AS IsDelete,b‘0‘ AS IsRead FROM info WHERE Id=11390 ORDER BY Score DESC LIMIT 0,10;

上面的這種僅適用於可構造新數據,內容可以合成sql,格式、數據都比較單一,但對某些數據動態的、並依靠其他表,這種操作稍顯無力。

  • 設置列變量,查詢另外一張表頭的數據,再組裝SQL

SET @id:=‘‘;

SELECT @id:=Id FROM base_info WHERE type=‘1‘;

-- 先刪除已有的,覆蓋
DELETE FROM info WHERE Id=@id;
INSERT INTO info(Id,Count1,Count2,Count3,Count4,Count5,Time6,Num7,Time8)
VALUES (@id,0,0,0,0,9,NOW(),0,NOW());

SQL使用之關聯更新、批量插入