使用优先级字段获取已连接的mysql表的最大/最小值

时间:2014-02-10 15:08:30

标签: mysql sql join max

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

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,到目前为止我只能使用触发器查询并存储作业表中每个作业的最高和最低任务的名称和状态,但我想在选择查询,如果可能的话。

有什么建议吗? 感谢

1 个答案:

答案 0 :(得分:0)

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

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)