MySQL數(shù)據(jù)庫(kù)同時(shí)查詢更新同一張表的方法
在平常的項(xiàng)目中,經(jīng)常會(huì)碰到這樣的問(wèn)題:我需要在一張標(biāo)中同時(shí)更新和查詢出來(lái)的數(shù)據(jù)。例如:有如下圖一張表數(shù)據(jù),現(xiàn)在需要更新操作為:把status=1的name值更新為id=2的name值

通常情況下我們會(huì)想到如下語(yǔ)句來(lái)實(shí)現(xiàn)這個(gè)需求:
UPDATE tb_testSET NAME = ( SELECT NAME FROM tb_test WHERE id= 2)WHERE `status` = 1
結(jié)果卻報(bào)錯(cuò),報(bào)錯(cuò)信息為:You can't specify target table 'tb_test' for update in FROM clause,不能在同一語(yǔ)句中update,select同一張表。不能在同一張表操作,換個(gè)思路,如果不是同一張表的話應(yīng)該就是可以的。于是,可以把select出來(lái)的結(jié)果當(dāng)成一個(gè)臨時(shí)的中間表,從中間表中獲取想要的更新相關(guān)的數(shù)據(jù)。于是,上面的更新語(yǔ)句可以更改成下面這樣子:
UPDATE tb_testSET NAME = (select name from ( SELECT NAME FROM tb_test WHERE id = 2) as t)WHERE `status` = 1
這樣就可以完成題目中的操作。經(jīng)歷的大致過(guò)程為:查詢出id=2的數(shù)據(jù)作為中間表t;set的數(shù)據(jù)從t表中查詢出來(lái);做更新操作這樣就不是在同一語(yǔ)句中update,select同一張表了,因?yàn)檫@相當(dāng)與在操作兩張表,tb_test和中間表t。最后的結(jié)果如下圖:

相關(guān)文章
MySQL?如何將查詢結(jié)果導(dǎo)出到文件(select?…?into?Statement)
我們經(jīng)常會(huì)遇到需要將SQL查詢結(jié)果導(dǎo)出到文件,以便后續(xù)的傳輸或數(shù)據(jù)分析的場(chǎng)景,本文就MySQL中select…into的用法進(jìn)行演示,感興趣的朋友跟隨小編一起看看吧2024-08-08
Linux下MySQL5.7.18 yum方式從卸載到安裝過(guò)程圖解
這篇文章主要介紹了Linux下MySQL5.7.18 yum方式從卸載到安裝過(guò)程圖解,需要的朋友可以參考下2017-06-06
MySQL創(chuàng)建唯一索引時(shí)報(bào)錯(cuò)Duplicate?entry?*?for?key問(wèn)題
這篇文章主要介紹了MySQL創(chuàng)建唯一索引時(shí)報(bào)錯(cuò)Duplicate?entry?*?for?key問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09
MySQL?5.7中NULL與‘?‘空字符值的多維度分析(詳解)
在數(shù)據(jù)庫(kù)設(shè)計(jì)和開(kāi)發(fā)過(guò)程中,正確理解和使用NULL值對(duì)于確保數(shù)據(jù)質(zhì)量和查詢效率至關(guān)重要,本文將從多個(gè)維度對(duì)NULL值進(jìn)行深入分析,并與空字符串''以及其他控制進(jìn)行對(duì)比,旨在為讀者提供一個(gè)全面而清晰的理解,感興趣的朋友跟隨小編一起看看吧2024-12-12
MySQL 給用戶添加 ALTER VIEW 的權(quán)限的步驟
在 MySQL 中,用戶權(quán)限的管理是非常重要的,以確保數(shù)據(jù)庫(kù)安全性和數(shù)據(jù)完整性,這篇文章主要介紹了MySQL 給用戶添加 ALTER VIEW 的權(quán)限,需要的朋友可以參考下2024-05-05
MySQL對(duì)limit查詢語(yǔ)句的優(yōu)化方法
這篇文章主要介紹了MySQL對(duì)limit查詢語(yǔ)句的優(yōu)化方法,分別講解了offset參數(shù)比較小和offset參數(shù)比較大的時(shí)候,如何優(yōu)化查詢語(yǔ)句,需要的朋友可以參考下2014-07-07

