我有一个查询,当我将其作为选择运行时,我得到1014条记录。当我将其作为更新运行时,它会更新通常少于5的不同数量的记录。
实施例
Select * from Table
where firstname ='john'
and lastname = 'smith'
and email='john.smith@gmail.com'
返回1014行
update Table
set meaninglesscolumn = 1
where firstname ='john'
and lastname = 'smith'
and email='john.smith@gmail.com'
此更新运行后,此查询返回1012(或更低的数字,每次运行后它会一直下降,但运行此+500次将是麻烦)
Select * from Table
where firstname ='john'
and lastname = 'smith'
and email='john.smith@gmail.com'
and meaninglesscolumn <> 1
感谢。
更新
对于这种混淆感到抱歉,上面的'select'返回了1658条记录,而不是1014条记录。我用'和无意义的列&lt;&gt;来运行它1'并得到1015(我想要更新的记录数)。然后我运行上面的'更新'和'选择'然后得到1014,然后再次运行'更新'并得到1012。
如此全程......
Select * from Table
where firstname ='john'
and lastname = 'smith'
and email='john.smith@gmail.com'
返回1658
Select * from Table
where firstname ='john'
and lastname = 'smith'
and email='john.smith@gmail.com'
and meaninglesscolumn <> 1
返回1015
update Table
set meaninglesscolumn = 1
where firstname ='john'
and lastname = 'smith'
and email='john.smith@gmail.com'
返回1行更新。
Select * from Table
where firstname ='john'
and lastname = 'smith'
and email='john.smith@gmail.com'
and meaninglesscolumn <> 1
返回1014
答案 0 :(得分:0)
select查询返回所有记录。 在无意义的列中找到更新查询更新或仅设置不同的值。 在第一种情况下,2记录在无意义列中已经具有值1。所以它只更新了1012条记录。
答案 1 :(得分:0)
尝试
update Table
set meaninglesscolumn = 1
where id in (
Select id from Table
where firstname ='john'
and lastname = 'smith'
and email='john.smith@gmail.com'
and meaninglesscolumn <> 1)
;
答案 2 :(得分:0)
如上所述,SELECT语句只是匹配FirstName,LastName和Email ......没有别的!因此忽略所有其他列,包括MeaninglessColumn。
如果你有1000行,其中100个具有MeaninglessColumn = 1和900作为MeaninglessColumn = 2,仅在你的WHERE子句中使用FirstName,LastName和Email,它不关心有多少具有MeanlessColumn = 1或2。现在,在您的UPDATE语句中,您正在更新与SELECT相同的行数(即使其中一些已经具有MeaninglessColumn = 1),因此您的更新将返回与初始SELECT相同的行数(至少在MS中) SQL Server)。但是,您正在第二次尝试更改SELECT,现在添加在MeaninglessColumn&lt;&gt;中你做了两件事:
正如priyanka-kotari所述,如果您想查看您将要影响的确切行数,您需要包含您正在更新的内容的否定,即MeaninglessColumn&lt;&gt; 1。
答案 3 :(得分:0)
为什么不用while循环来更新它们呢?
选择
while(result = fetch){ UPDATE }