SQL - 根据 CTE 使用 2 个不同值更新一列

问题描述 投票:0回答:1

我有一张桌子

people
:

person_id 是_学生
001
002
003
004
005

还有一个 CTE

student_population
,其中包含学生的所有 ID:

学生id
003
004
005

我想用 T/F 值更新

is_student
中的
people
。这就是我想要的结果:

person_id 是_学生
001 F
002 F
003 T
004 T
005 T

我使用的代码是:

with student_population as (
    select ... from...
)
update 
    people p
set 
    is_student = case
        when p.person_id = stu.student_id then 'T'
        else 'F'
    end
from 
    student_population stu

运行此代码后,对于

people
中的第一个ID,我只在
is_student
中得到一个“T”。所有其他值均为“F”。这是我得到的错误结果:

person_id 是_学生
001 F
002 F
003 T
004 F
005 F

我该如何解决这个问题?

sql postgresql sql-update
1个回答
0
投票

您的 Postgres 更新联接缺少连接所涉及的两个表的

WHERE
子句。试试这个版本:

update people p
set is_student = case when stu.student_id is not null then 'T' else 'F' end
from student_population stu
where p.person_id = stu.student_id;
© www.soinside.com 2019 - 2024. All rights reserved.