MySQL數(shù)據(jù)庫同時查詢更新同一張表的方法
在平常的項目中,經(jīng)常會碰到這樣的問題:我需要在一張標(biāo)中同時更新和查詢出來的數(shù)據(jù)。例如:有如下圖一張表數(shù)據(jù),現(xiàn)在需要更新操作為:把status=1的name值更新為id=2的name值
通常情況下我們會想到如下語句來實(shí)現(xiàn)這個需求:
UPDATE tb_testSET NAME = ( SELECT NAME FROM tb_test WHERE id= 2)WHERE `status` = 1
結(jié)果卻報錯,報錯信息為:You can't specify target table 'tb_test' for update in FROM clause
,不能在同一語句中update,select同一張表。不能在同一張表操作,換個思路,如果不是同一張表的話應(yīng)該就是可以的。于是,可以把select出來的結(jié)果當(dāng)成一個臨時的中間表,從中間表中獲取想要的更新相關(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同一張表了,因為這相當(dāng)與在操作兩張表,tb_test和中間表t。最后的結(jié)果如下圖:
相關(guān)文章
SQL?ALTER?TABLE語句靈活修改表結(jié)構(gòu)和數(shù)據(jù)類型
這篇文章主要介紹了SQL?ALTER?TABLE語句靈活修改表結(jié)構(gòu)和數(shù)據(jù)類型,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12MySQL數(shù)據(jù)庫主從復(fù)制延時超長的解決方法
這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)庫主從復(fù)制延時超長的解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用MySQL具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06Windows下MySQL?8.0.29?安裝和刪除圖文教程
這篇文章主要為大家詳細(xì)介紹了Windows下MySQL?8.0.29?安裝和刪除圖文教程,文中安裝步驟介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-07-07SQL HAVING子句在GROUP BY中的條件篩選靈活運(yùn)用
這篇文章主要為大家介紹了SQL HAVING子句在GROUP BY中的條件篩選靈活運(yùn)用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11MySQL錯誤代碼:1052?Column?'xxx'?in?field?list?is
今天在工作中寫sql語句時遇到了個sql錯誤,為記錄并不再重復(fù)出錯,下面這篇文章主要給大家介紹了關(guān)于MySQL錯誤代碼:1052?Column?'xxx'?in?field?list?is?ambiguous的原因和解決方法,需要的朋友可以參考下2023-04-04