可以试试这样,到最后如果需要去重就去重一下就好了,我现在改成了in,如果你有需要可以改成inner join,不过这样并不能保证速度一定加快,如果真需要优化,还是要有执行计划的。 SELECT * FROM tab1 e WHERE e.id IN (SELECT pp.id FROM tab2 pp WHERE pp.type = '1') UNION ALL SELECT * FROM tab1 e WHERE e.master_id IN (SELECT ppid FROM tab2 pp WHERE pp.type = '1')
select *
from tab1 e
where exists (select 1
from tab2 pp
where (e.id = pp.id or e.master_id = pp.id)
and pp.type = '1');
1楼的结果集会多出一部分,即存在e.master_id=pp.id and pp.type=1,但是同时存在e.id=pp.id(这几条记录都不满足pp.type=1) 这个部分
为什么需要优化呢,如果是查询缓慢的话,提供下执行计划
把2楼的句子括号里面和外边都可以全部改成inner join,不过效率应该不会很好的。
SELECT *
FROM tab1 e
WHERE e.id IN (SELECT pp.id FROM tab2 pp WHERE pp.type = '1')
UNION ALL
SELECT *
FROM tab1 e
WHERE e.master_id IN (SELECT ppid FROM tab2 pp WHERE pp.type = '1')