在MySQL中,我需要更新查询结果的一半记录,以便将列设置为某个属性。
就像......
UPDATE some_table SET some_column='some_value'
WHERE some_query = 'something' LIMIT (SELECT COUNT(*)/2 FROM some_table);
但这会给我一个语法错误。我想知道这是否可行以及如何在MySQL中执行此操作。
感谢您的帮助。
答案 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)