有什么方法可以重用我们在子查询中联接的表的引用吗?
我有三张table:
任务类别,有关任务类别的信息
任务优先级,与任务类别关联的优先级
任务链接,每个任务的url链接。
请检查这把小提琴。
CREATE TABLE task_categories (
task_category_id int,
code varchar(255),
name varchar(255)
);
CREATE TABLE task_priorities (
priority_id int,
task_category_id int,
priority int
);
CREATE TABLE task_links (
task_links_id int,
task_category_id int,
title varchar(255),
link varchar(255),
position int
);
如果我们需要具有高优先级的任务链接,我们需要连接所有这些表。像这样的
select * from task_links t_links
inner join task t on t_links.task_id = t.task_id
inner join task_priorities t_priorities on t.task_id = t_priorities.task_id
where t.code in ('TASK_P2', 'TASK_P3') and
t_priorities.priority = (select min(priority) from task_priorities tp
inner join task t on tp.task_id = t.task_id
where t.code in('TASK_P2', 'TASK_P3'))
order by t_links.position;
有没有办法优化这个查询?这个查询连接了表两次,我认为应该有更好的方法来编写这个查询。
1条答案
按热度按时间t8e9dugd1#
子查询的逻辑不正确。它不是为每个任务选择最低优先级。
我猜你真的想要:
这不需要比上的索引更多的优化
task_priorities(task_id, priority)
.