MySQL完成一起查詢更新同一張表的案例區(qū)分
發(fā)表時(shí)間:2023-07-19 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]這篇文章主要介紹了MySQL數(shù)據(jù)庫同時(shí)查詢更新同一張表的方法,需要的朋友可以參考下在平常的項(xiàng)目中,經(jīng)常會(huì)碰到這樣的問題:我需要在一張標(biāo)中同時(shí)更新和查詢出來的數(shù)據(jù)。例如:有如下圖一張表數(shù)據(jù),現(xiàn)在需要更...
這篇文章主要介紹了MySQL數(shù)據(jù)庫同時(shí)查詢更新同一張表的方法,需要的朋友可以參考下
在平常的項(xiàng)目中,經(jīng)常會(huì)碰到這樣的問題:我需要在一張標(biāo)中同時(shí)更新和查詢出來的數(shù)據(jù)。例如:有如下圖一張表數(shù)據(jù),現(xiàn)在需要更新操作為:把status=1的name值更新為id=2的name值

通常情況下我們會(huì)想到如下語句來實(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
,不能在同一語句中update,select同一張表。不能在同一張表操作,換個(gè)思路,如果不是同一張表的話應(yīng)該就是可以的。于是,可以把select出來的結(jié)果當(dāng)成一個(gè)臨時(shí)的中間表,從中間表中獲取想要的更新相關(guān)的數(shù)據(jù)。于是,上面的更新語句可以更改成下面這樣子:
UPDATE tb_testSET NAME = (select name from ( SELECT NAME FROM tb_test WHERE id = 2) as t)WHERE `status` = 1
這樣就可以完成題目中的操作。經(jīng)歷的大致過程為:查詢出id=2的數(shù)據(jù)作為中間表t;set的數(shù)據(jù)從t表中查詢出來;做更新操作這樣就不是在同一語句中update,select同一張表了,因?yàn)檫@相當(dāng)與在操作兩張表,tb_test和中間表t。最后的結(jié)果如下圖:

以上就是MySQL實(shí)現(xiàn)同時(shí)查詢更新同一張表的實(shí)例分析的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!
學(xué)習(xí)教程快速掌握從入門到精通的SQL知識(shí)。