【问题标题】:Get maximum/minimum values on joined mysql tables with priority field获取具有优先级字段的已连接 mysql 表的最大/最小值
【发布时间】:2014-02-10 15:08:29
【问题描述】:

我有三个表来描述有任务的工作:

job:
jobId (int)
name (varchar)

task:
taskId (int)
jobId (int)
statusId (int)
name

taskStatus:
taskStatusId (int)
name (varchar)
priority (int)

我想向用户显示一个列表,其中显示了每个作业,并且在列表中,我需要显示具有最高和最低优先级的任务的名称和状态。 例如:

Job                 Highest priority task     Highest pri. task status
Build a house          Build the base              Very high

我正在使用 MySQL,到目前为止我所能想到的就是使用触发器来查询和存储作业表中每个作业的最高和最低任务的名称和状态,但我想在选择查询,如果可能的话。

有什么建议吗? 谢谢

【问题讨论】:

    标签: mysql sql join max


    【解决方案1】:

    解决此问题的一种方法是使用嵌套的标量子查询:

    select j.name,
           (select ts.name
            from task t join
                 taststatus ts
                 on t.name = ts.name
            where t.jobid = j.jobid
            order by priority
            limit 1
           ) as HighestPriority,
           (select ts.status
            from task t join
                 taststatus ts
                 on t.name = ts.name
            where t.jobid = j.jobid
            order by priority
            limit 1
           ) as HighestPriorityStatus
    from job j;
    

    如果您有适当的索引,这可能会产生最佳性能:task(jobid, name)taskstatus(name, priority, status)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-17
      • 1970-01-01
      • 2018-01-16
      • 1970-01-01
      相关资源
      最近更新 更多