-4

我正在搜索检查所有行中的列值,并使用 where 子句作为条件进行更新。我的情况如下:

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

我想检查特定学生的列通道 uri 值以及所有匹配的结果以将其设置为空。

所以在这种情况下,第 3 行和第 5 行应该设置为空。

我已经尝试过了,但是它将所有channeluri其他行设置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 子句中给定的别名而不是名称来引用要更新的表(因为同一个表名被引用了两次。还使用表别名限定 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。我已按照您在语句中指定的方式保留了分配,但使用表别名限定了列。

我认为这不是您的问题,但我从不在“不等于”比较运算符符号 ( !=) 中包含空格。我以前从未见过。我更喜欢将<>符号用于“不等于”比较运算符。

从您对问题的描述和您的示例来看,您根本不清楚为什么需要将表连接到自身。

UPDATE我建议您首先编写一个 SELECT 语句,通过用一个子句替换andSET子句来返回您要更新的行,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 的人并将其归零?

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

类似的事情,我在手机上,妻子偷了电脑

于 2012-06-24T10:06:55.397 回答