我有一张桌子
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 |
我该如何解决这个问题?
您的 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;