更新SQL查询结果的一半

时间:2016-10-31 14:45:41

标签: mysql sql

在MySQL中,我需要更新查询结果的一半记录,以便将列设置为某个属性。

就像......

UPDATE some_table SET some_column='some_value'
WHERE some_query = 'something' LIMIT (SELECT COUNT(*)/2 FROM some_table);

但这会给我一个语法错误。我想知道这是否可行以及如何在MySQL中执行此操作。

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

E.g:

UPDATE my_table a 
  JOIN 
     ( SELECT x.*, @i:=@i+1 rank FROM my_table x, (SELECT @i:=0) vars ORDER BY id) b 
    ON b.id = a.id 
   SET a.val = 'a' 
 WHERE rank % 2 = 1;

这会更新每隔一行(大约相当于'行的一半')

答案 1 :(得分:0)

你可以添加一个row_number,只影响行号<=行总数的一半的行...类似的东西;

WITH Numbered as (
SELECT *,
    row_number() as RowNum
FROM some_table 
)
UPDATE Numbered
SET some_row = 'some_value'
WHERE RowNum <= (SELECT Count(*) / 2 FROM Numbered)

答案 2 :(得分:0)

我不确定mysql是否具有ROW_NUMBER功能,但在T-SQL中你可以使用这样的东西:

with a (rownum, some_column) 
as 
(select ROW_NUMBER() over (order by some_column) as rownum, some_column 
    from some_table 
    where some_query = 'something')
update a 
    set some_column='some_value'
from a
where rownum <= (select count(1)/2 from a)