MySQL根据子表状态条件检查创建视图

Posted

技术标签:

【中文标题】MySQL根据子表状态条件检查创建视图【英文标题】:MySQL create view based on child table status condition check 【发布时间】:2021-06-14 06:02:39 【问题描述】:

表:任务(父级)

id | name | ...(other columns)

表:task_histories(子)

id | task_id(fk) | date | status(PENDING,OVERDUE,COMPLETE) | ...(other columns)

子表有多个基于不同日期的父项。

我想根据以下条件检查创建一个带有task_id | current_status 的视图task_status_view,以进行直到今天的日期比较。 (每个task.id应该只有一个条目)

如果:有任何带有status = 'OVERDUE' 的条目,则将current_status 视为'O' ELSE IF: 有任何带有status = 'PENDING' 的条目然后将current_status 视为'P' ELSE:如果有上述任何一项,则将current_status 视为'COMPLETE'

【问题讨论】:

你试过case了吗? 我正在进行 sql 查询,但甚至无法为每个任务执行一个条目。 【参考方案1】:

您要查找的内容称为条件聚合。

select
  task_id,
  case
    when sum(status = 'OVERDUE') > 0 then 'OVERDUE'
    when sum(status = 'PENDING') > 0 then 'PENDING'
    else                                  'COMPLETE'
  end as total_status
from task_histories
group by task_id
order by task_id;

(在 mysql 中 true 等于 1,false 等于 0,所以我们可以将条件相加。)

【讨论】:

谢谢...我认为它应该可以工作。但让我测试所有情况。你能添加create view 语法吗? 无需进一步;我已经基于此创建了视图谢谢.. 不客气 :-) 如果要包含尚未开始的任务,则必须顺便从任务表和外部连接历史中进行选择。

以上是关于MySQL根据子表状态条件检查创建视图的主要内容,如果未能解决你的问题,请参考以下文章

在 SQL Server 中根据条件创建视图

如何根据条件显示或不显示 NIB 创建的视图

在数据库视图中应用动态 where 条件(oracle - 12c,mysql 5+)

如何根据用户的角色创建具有不同显示的视图?

根据数据库状态创建动态 SQL 视图

mysql中,啥是视图,视图的作用是啥