MySQL跨表、多表更新SQL語句總結

單表更新
UPDATE table_name SET field1=new-value1, field2=new-value2 WHERE field=value
多表更新

情況一:

UPDATE userA as a , userB as b SET a.num = b.num*0.5 WHERE a.id = b.uid AND a.deleted_at is null;
UPDATE userA as a INNER JOIN userB as b ON a.id = b.uid SET a.num = b.num*0.5 WHERE AND a.deleted_at is null;

情況二:

UPDATE userA as a INNER JOIN userB as b ON a.id = b.uid SET a.num = b.num*0.5,a.state = 1 WHERE a.id = b.id 
AND a.deleted_at is null
AND (
	b.gb_name = 'a'
	OR b.gb_name = 'b'
	OR b.gb_name = 'c'
	OR b.gb_name = 'd'
	OR b.gb_name = 'e'
	OR b.gb_name = 'f'
	OR b.gb_name = 'g'
);

擴展:
inner join和where區別:
1 WHERE子句中使用的連接語句,在數據庫語言中,被稱爲隱性連接。INNER JOIN……ON子句產生的連接稱爲顯性連接。(其他JOIN參數也是顯性連接)WHERE和INNER JOIN產生的連接關係,沒有本質區別,結果也一樣。但是!隱性連接隨着數據庫語言的規範和發展,已經逐漸被淘汰,比較新的數據庫語言基本上已經拋棄了隱性連接,全部採用顯性連接了。

2,測試結果inner join效率更快
事例:
Inner jion 原理:

SELECT
	*
FROM
	A
INNER JOIN B ON B.ID = A.ID
AND B.State = 1
INNER JOIN C ON B.ID = C.ID

where 原理:

SELECT
	*
FROM
	A
INNER JOIN B ON B.ID = A.ID
INNER JOIN C ON B.ID = C.ID
WHERE
	B.State = 1

INNER JOIN時會產生一個結果集,WHERE條件在這個結果集中再根據條件進行過濾。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章