更新所有行中特定列的查询

时间:2012-06-23 23:04:34

标签: sql sql-server linq sql-server-2008 sql-server-2005

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

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

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

因此,在这种情况下,第3行和第5行应设置为null。

我已经尝试了这一点,但它将channeluri以外的所有studnetid = 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 

3 个答案:

答案 0 :(得分:1)

参考表格由在FROM子句,而不是按名称(因为相同的表名它的别名给出更新被引用的两倍。另外限定与表别名WHERE子句中上StudentId基准为好。< / p>

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.我已按照您在语句中指定的方式离开了赋值,但使用表别名限定了列。

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

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

我建议您首先编写一个SELECT语句,通过将UPDATESET子句替换为SELECT <expression_list>子句,并使用包含值的expression_list来返回要更新的行主键列,要更新的列以及要检查的任何其他列。一旦SELECT返回您想要更新的行,然后将其转换为UPDATE语句。

答案 1 :(得分:0)

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

在这种情况下,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

类似的东西,我在手机上,妻子偷了电脑