如果另一个表中存在值,如何更新我的列?

Posted

技术标签:

【中文标题】如果另一个表中存在值,如何更新我的列?【英文标题】:How to Update my column if there value exists in another table? 【发布时间】:2020-01-29 09:59:56 【问题描述】:

我有两个表,班级和学生表。

student 表包含 student_name、class_time 和 class_id。

类表包含 class_time ,类 id 为 IsClassConduct。

如果学生表中存在时间和class_id,我想更新班级表的列IsClassConduct Y

和期望的结果将是

【问题讨论】:

到目前为止你有什么尝试? 请添加文本数据而不是图像。 【参考方案1】:
UPDATE ClassTable c
SET c.IsClassConduct = CASE WHEN EXIST ( SELECT 1
                                         FROM StudentTable s
                                         WHERE s.class_id = c.class_id
                                           AND INSTR(s.class_time, c.class_time) > 0 )
                            THEN 'Y'
                            ELSE 'N' 
                            END

?

【讨论】:

【参考方案2】:
update classTable set IsClassConduct = 'Y'
where (Class_time,class_id) in (select class_time,class_id from student_talbe);

或者你也可以使用内部连接来完成。

【讨论】:

【参考方案3】:

您也可以使用 MERGE:

merge into class A using (select class_id,class_time from student)B 
on (A.class_id=B.class_id and instr(B.class_time,A.class_time)>0) 
when matched then update set A.IsClassConduct='Y';

您也可以使用 CONTAINS(B.class_time,A.class_time)>0 代替 INSTR,但为此您必须创建 INDEX。

【讨论】:

以上是关于如果另一个表中存在值,如何更新我的列?的主要内容,如果未能解决你的问题,请参考以下文章

当没有明确的列可以加入时,如何使用另一个表中的值更新 sql 表?

涉及因素的数据表分配

如何优化查询以使用oracle中另一个表中的列更新表列

SQL UPDATE - 如何使用另一个表更新一个表中的列?

MySQL - 更新/设置一个表中的列等于另一个表中的 MAX 值

如果存在匹配值,则从另一个表中检索数据 - 否则基于第一个连接条件返回