作为简化,我有四个表,书,出版商,作者和公司。本书和出版商都引用了作者,但该引用可以为null 。
我可以通过使用这样的OR连接查询加入作者表来找到作者,但速度非常慢。
编辑我必须使用作者表加入另一个。
架构:
select book.title,
author.name,
company.name as company_name
from book
inner join publisher on book.publisher_id = publisher.id
inner join author
on (book.author_id = author.id OR publisher.author_id = author.id)
inner join company on author.company_id = company.id;
我想知道优化此查询的最佳方法是什么,而不是加入OR条件。感谢
答案 0 :(得分:0)
你是对的。 <{1}}子句中的OR
可以真正减慢查询速度。
相反,请使用两个ON
s:
left join
正式地,如果您只想在其中一个表中返回匹配的行,则可能需要添加select b.title, coalesce(ab.name, ap.name) as name
from book b inner join
publisher p
on b.publisher_id = p.id left join
author ab
on b.author_id = ab.id left join
author ap
on p.author_id = ap.id;
。