sql server的 update from 語(yǔ)句的深究
一般來(lái)說(shuō)update一個(gè)表, 使用where語(yǔ)句即可:
UPDATE Ttest SET
statusInd = 'ACTIVE'
WHERE
id = 123
注意:
update 語(yǔ)句后面的table名稱(chēng),是不可以啟用別名的。
那么此時(shí)的id字段,就是來(lái)自Ttest表的(無(wú)可厚非)
但是,如果update,還有額外的join table 條件約束,語(yǔ)句如下:
UPDATE Ttest SET
statusInd = 'ACTIVE'
FROM
Tparent parent
WHERE
Ttest.id = 123
AND Ttest.parentId = parent.id
AND parent.statusInd = 'ACTIVE'
注意:
update 后面的Ttest 不能使用別名
那么定位到,要修改的Ttest記錄,就必須這樣寫(xiě):Ttest.id = 123
如果直接寫(xiě)id=123, 會(huì)分不清是 Ttest 表 還是 Tparent 表的 id
此sql語(yǔ)句的意思是,如果想修改自身的statusInd屬性,得關(guān)聯(lián)其parent的statusInd屬性是否也是'ACTIVE'
此時(shí),層級(jí)關(guān)系是使用兩個(gè)表(Ttest和Tparent)來(lái)定義 。
但是如果,數(shù)據(jù)庫(kù)表的設(shè)計(jì),只是用一個(gè)表(Ttest),來(lái)表述數(shù)據(jù)之間的層級(jí)關(guān)系(Ttest.parentId = Ttest.id),
如何書(shū)寫(xiě),可以實(shí)現(xiàn)目的呢?(如果想修改自身的statusInd屬性,得關(guān)聯(lián)其parent的statusInd屬性是否也是'ACTIVE')
實(shí)現(xiàn)如下:
UPDATE Ttest SET
statusInd = 'ACTIVE'
FROM
Ttest parent,
Ttest
WHERE
Ttest.id = 123
AND Ttest.parentId = parent.id
AND parent.statusInd = 'ACTIVE'
解釋?zhuān)?
其需求是:修改自身的statusInd屬性,得關(guān)聯(lián)其parent的statusInd屬性是否也是'ACTIVE'
update 后面的表(Ttest)不能,命名別名!
from 后面的表 也是 Ttest,但是 要update的Ttest 記錄 和 from Ttest 記錄并不一樣 (要update 孩子,但是要from 關(guān)聯(lián)其父親)
from 后面 要多寫(xiě) 一個(gè) 沒(méi)有別名的 Ttest ,用來(lái)指定此表的記錄,就是要被update的。
而需要from join的 (Ttest)表,就必須有一個(gè)別名,來(lái)區(qū)別與update的表(Ttest)
相關(guān)文章
sqlserver中操作主從關(guān)系表的sql語(yǔ)句
在項(xiàng)目開(kāi)發(fā)中,經(jīng)常出現(xiàn)這樣的需求。在新增或修改一個(gè)主表數(shù)據(jù)時(shí),對(duì)應(yīng)的從表也要進(jìn)行同步,此時(shí)我們是怎么操作的了?2011-07-07SQLSERVER中union,cube,rollup,cumpute運(yùn)算符使用說(shuō)明
union,cube,rollup,cumpute運(yùn)算符的使用技巧。2009-09-09SQL SERVER備份數(shù)據(jù)庫(kù)存儲(chǔ)過(guò)程的方法
這篇文章主要介紹了SQL SERVER備份數(shù)據(jù)庫(kù)存儲(chǔ)過(guò)程的方法,需要的朋友可以參考下2015-10-10Sql Server 索引使用情況及優(yōu)化的相關(guān)Sql語(yǔ)句分享
Sql Server 索引使用情況及優(yōu)化的相關(guān) Sql 語(yǔ)句,非常好的SQL語(yǔ)句,記錄于此,需要的朋友可以參考下2012-05-05教你編寫(xiě)SQLMap的Tamper腳本過(guò)狗
安全狗其實(shí)是比較好繞的WAF,繞過(guò)方法很多,但這里我們就用一種:注釋混淆,這篇文章主要介紹了教你編寫(xiě)SQLMap的Tamper腳本過(guò)狗,需要的朋友可以參考下2023-02-02SQL Server如何通過(guò)SQL語(yǔ)句直接操作另一臺(tái)服務(wù)器上的SQL SERVER的數(shù)據(jù)
這篇文章主要介紹了SQL Server如何通過(guò)SQL語(yǔ)句直接操作另一臺(tái)服務(wù)器上的SQL SERVER的數(shù)據(jù),需要的朋友可以參考下2022-10-10SQL Server利用sp_spaceused如何查看表記錄存在不準(zhǔn)確的情況
這篇文章主要給大家介紹了關(guān)于SQL Server利用sp_spaceused如何查看表記錄存在不準(zhǔn)確情況的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用SQL Server具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04SQL Server實(shí)時(shí)同步更新遠(yuǎn)程數(shù)據(jù)庫(kù)遇到的問(wèn)題小結(jié)
這篇文章主要介紹了SQL Server實(shí)時(shí)同步更新遠(yuǎn)程數(shù)據(jù)庫(kù)遇到的問(wèn)題小結(jié),需要的朋友可以參考下2017-04-04SQLServer2005創(chuàng)建定時(shí)作業(yè)任務(wù)
這篇文章主要為大家介紹了SQLServer2005創(chuàng)建定時(shí)作業(yè)任務(wù)的詳細(xì)過(guò)程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-12-12