-4

すべての行の列の値を確認し、条件としてwhere句を使用して更新することを検索しています。私の場合は次のとおりです。

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

特定の学生の列チャネルURI値と、一致するすべての結果をチェックして、nullに設定したいと思います。

したがって、この場合、行3と5はnullに設定する必要があります。

これを試しましたが、nullchanneluri以外のすべての行が設定されましたstudnetid = 4

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

3 に答える 3

1

名前ではなく、FROM 句で指定されたエイリアスで更新するテーブルを参照します (同じテーブル名が 2 回参照されるためです。また、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 に設定されています。ステートメントで指定したとおりに割り当てを残しましたが、列をテーブル エイリアスで修飾しました。

これはあなたの問題ではないと思いますが、「等しくない」比較演算子記号 ( !=) にスペースを入れることはありません。私は前にそれを見たことがありません。<>私は、「等しくない」比較演算子に記号を使用することを好みます。

問題の説明と例から、テーブルをそれ自体に結合する必要がある理由はまったく明確ではありません。

UPDATEandSET句を句に置き換え、SELECT <expression_list>主キー列の値、更新する列、および任意のチェックしたい他の列。その SELECT が更新する行を返したら、それを UPDATE ステートメントに変換します。

于 2012-06-25T19:22:38.210 に答える
0
update [table_name] set channelURI = "null" where SubscriptionID = 3 or SubscriptionID =5

この場合、SubscriptionID は主キーである必要があります。

于 2012-06-24T07:19:17.507 に答える
0
Update table set channeluri = null where studentid <> 4

それはあなたが欲しいものですか?または、学生 4 と同じ uri を持つものをすべて見つけて、それらを null にしたいですか?

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

そのようなもの、私は私の電話で、妻がPCを盗んだ

于 2012-06-24T10:06:55.397 に答える