如果id匹配来自同一个表,则更新

时间:2017-07-20 10:32:29

标签: postgresql

我有一张如下表格,

s_id s_score name category subcategory
123   10     core  account  subscription
123   10     core   values    numeric
456    9     esr    public    movies
789    6     john   service   others
789   6      john   digital   others

我希望在我的id相同的情况下更新s_score列。我只需要一个分数,将另一个分数更新为null。预期产出如下。

s_id s_score name category subcategory
123   10     core  account  subscription
123          core   values    numeric
456    9     esr    public    movies
789    6     john   service   others
789         john   digital   others

提前致谢。

2 个答案:

答案 0 :(得分:1)

根据ROW_NUMBER函数的输出有条件地执行某些操作可能对您有所帮助。根据您的评论对您的数据模型做出几个假设,以下内容应该与您正在寻找的内容相近:

SELECT s.s_id, 
case when row_number()
    over (partition by s_id order by c.category) = 1 then s_score else null end as s_score,
s.name, c.category, c.subcategory
from s_scores s 
join categories c on s.s_id = c.s_id

对于每个s_id,它为您提供该s_id中类别的行号。在row_number为1的情况下(即,它是s_id的第一个类别记录),它将返回分数。对于其他行号,它将返回null。

这是按类别排序,根据您的预期结果似乎是错误的,因此我的问题是哪一行应该得分,哪一行应该为空。如果您知道,只需更新order by

中引用的字段即可

答案 1 :(得分:-1)

您可以使用以下更新查询;

update tableName set s_core='32' where s_id='123'