Sql 更新所有行中特定列的查询
我正在搜索所有行中的check列值,并使用where子句作为条件进行更新。我的情况如下:Sql 更新所有行中特定列的查询,sql,sql-server,linq,sql-server-2008,sql-server-2005,Sql,Sql Server,Linq,Sql Server 2008,Sql Server 2005,我正在搜索所有行中的check列值,并使用where子句作为条件进行更新。我的情况如下: SubscriptionID ChannelURI StudentID 1 XXXX 4 2 yyyy 4 3 XXXX 3 4 XXXX
SubscriptionID ChannelURI StudentID
1 XXXX 4
2 yyyy 4
3 XXXX 3
4 XXXX 4
5 XXXX 2
我想检查特定学生和所有匹配结果的列通道uri值,将其设置为null
所以在这种情况下,第3行和第5行应该设置为null
我已经尝试过了,但是它将studnetid=4
以外的其他行的所有channeluri
设置为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
在这种情况下,SubscriptionID必须是主键。更新表集channeluri=null,其中studentid 4
Update table set channeluri = null where studentid <> 4
那就是你想要的?或者你想找到所有与student 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
table.channeluri=t2.channeluri其中table.studentid 4和t2.studentid=4上的表内部联接表t2中更新表集channeluri=null
类似的情况是,我在手机上看到,妻子偷了电脑引用了要更新的表,该表使用的是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。我保留了语句中指定的赋值,但使用表别名限定了列
我不认为这是您的问题,但我从不在“不等于”比较运算符符号(!=
)中包含空格。我以前从未见过这种情况。我更喜欢使用
符号作为“不等于”比较运算符
从您对问题的描述和示例来看,根本不清楚为什么需要将表连接到自身
我建议您首先编写一条SELECT语句,返回要更新的行,方法是将
update
和SET
子句替换为SELECT
子句,表达式列表中包含主键列的值,要更新的列,以及任何其他要检查的列。一旦SELECT返回要更新的行,然后将其转换为update语句。您能解释为什么第3行和第5行应设置为null,而其他行不应设置为null的逻辑吗?您确实需要提供更好的描述。您根本不清楚y是什么您正在尝试实现。很抱歉,我没有说清楚:我想检查表中除student=4以外的所有studentid的所有channeluri,如果找到studentid=4通道uri的匹配项,则将匹配的行channeluri设置为null,您认为应该如何做?更新SubscriptionCourse set channeluri=1,DeviceId=null FROM SubscriptionCourse as t1 internal JOIN SubscriptionCourse as t2 on t1.ChannelURI=t2.ChannelURI WHERE StudentId!=4我已经尝试过了,但是它将studnetid=4以外的其他行的所有ChannelURI都设置为Null。情况并非如此,WHERE条件应该是StudentId,在您提交的查询中,我如何知道subscriptionid,如果有更多超过2场比赛?
UPDATE t1
SET t1.ChannelURI = 1
, t1.DeviceId = NULL
FROM SubscriptionCourse t1
JOIN SubscriptionCourse t2
ON t1.ChannelURI = t2.ChannelURI
WHERE t1.StudentId != 4