2012-06-23 33 views
-4

我正在搜索檢查所有行中的列值並使用where子句作爲條件進行更新。我的情況如下:更新所有行中特定列的查詢

SubscriptionID ChannelURI StudentID 
     1    XXXX    4 
     2    yyyy    4 
     3    XXXX    3 
     4    XXXX    4 
     5    XXXX    2 

我想檢查特定學生的列通道uri值和所有匹配結果以將其設置爲null。

所以在這種情況下,第3行和第5行應該設置爲空。

我已經試過這一點,但它設置其他行的所有channeluristudnetid = 4爲null

UPDATE SubscriptionCourse 
    Set ChannelURI = 1 
    , DeviceId = null 
    FROM SubscriptionCourse as t1 
INNER JOIN SubscriptionCourse as t2 
    on t1.ChannelURI = t2.ChannelURI 
WHERE StudentId! = 4 
+1

你能解釋一下爲什麼第3行和第5行應該設置爲空,但其他行不應該這樣的邏輯? –

+2

你真的需要提供一個更好的描述。目前還不清楚你想要達到的目標。 –

+0

對不起,我沒有說清楚:我想檢查表中除了student = 4以外的所有studentid的所有channeluri,並且如果發現studentid = 4 channel uri的匹配,則將匹配的行channeluri設置爲null –

回答

0
update [table_name] set channelURI = "null" where SubscriptionID = 3 or SubscriptionID =5 

在這種情況下,SubscriptionID必須是一個主鍵。

+0

這不是這種情況,where條件應該與StudentId,在您提交的查詢中,我如何知道subscriptionid,以及是否有超過2個匹配? –

0
Update table set channeluri = null where studentid <> 4 

那你想要什麼?或者你想找到所有與學生4具有相同uri的人,並將其刪除?

Update table set channeluri = null from table inner join table t2 on table.channeluri =t2.channeluri where table.studentid <> 4 and t2.studentid =4 

類似的東西,我的手機上的IM,妻子偷了電腦

1

參考在FROM子句中,而不是用名字(因爲在同一個表它的別名給出更新的表名字是引用了兩次,還與表的別名限定WHERE子句中StudentId參考爲好。

UPDATE t1 
    SET t1.ChannelURI = 1 
    , t1.DeviceId = NULL 
    FROM SubscriptionCourse t1 
    JOIN SubscriptionCourse t2 
    ON t1.ChannelURI = t2.ChannelURI 
WHERE t1.StudentId != 4 

你說你要ChannelURI設置爲NULL,但你的語句設置爲1的字面值我已經離開了你在你指定的任務r語句,但使用表別名限定列。

我不認爲這是你的問題,但我從不在「不等於」比較運算符符號(!=)中包含空格。我以前從未見過。我更喜歡使用<>符號作爲「不等於」比較運算符。

從你對問題的描述和你的例子來看,你完全不清楚爲什麼你需要將表加入自己。

我建議你先寫的是,通過與SELECT <expression_list>條款替換UPDATESET條款,與expression_list包括主鍵列(S)的值返回要更新的行SELECT語句中,列你想更新,以及任何你想檢查的其他列。一旦SELECT返回要更新的行,然後將其轉換爲UPDATE語句。

相關問題