我想用 k 替换属性值不同的值(我从列表中获取,因此 k 可以根据列表的大小而改变)。此外, k 不同的值需要以相同的比例更新。
e.g。属性Education
的值为University
。
现在,我想要更新University
应替换为Bachelors
,Masters
或Doctorate
的表格。
如果有100个元组,Education = University
那么:
33应更新为Bachelors
,
33到Masters
和
34到Doctorate
。
注意:在给定的示例中 k = 3.我需要一个可用于 k 的不同值的查询。因为,我将使用python将此查询集成到mysql中,您可以编写任何变量来表示 k 和列表索引。
编辑:一种天真的方法是首先将count
个元组存储在Education = University
的位置。然后将该计数除以 k (其中 k 是列表的长度)并在for循环中重复运行更新查询,直到列表中的值耗尽为止。
在更新查询中,我通过设置limit
= count / k 来限制受影响的行数。有没有更有效的方法来实现同样的目标?
答案 0 :(得分:0)
对于不同的环境,存在大量不同的解决方案。 我向您展示了如何通过单个更新来解决它。它不是最佳的,但它的工作正常。假设我们有两个表 - 学生(id,教育)和教育(姓名)。 那么,你在这里:
update student
set education_new = (
select
--s2.id, s2.education,
e1.name
from (
select (select count(*) from education x where x.rowid <= e.rowid) id, name from education e
) e1,
(
select
s.id, (select count(*) from student x where x.education = 'University' and x.rowid <= s.rowid) % (select count(*) from education) + 1 as e_id
from student s
) s2
where
e1.id = s2.e_id
and s2.id = student.id
)
where education = 'University'
在这种情况下,您还需要运行额外更新:
update student
set education = education_new
where
education <> education_new
and education_new is not null