我正在搜索所有行中的列值并使用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
答案 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语句,通过将UPDATE
和SET
子句替换为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
类似的东西,我在手机上,妻子偷了电脑