на самом деле это не намного проще (с точки зрения кода), но будет более производительным, поскольку вы используете объединения, а не оператор IN
:
select contactmeta .* from contactmeta
inner join tagobject tob, tag t, taggroup tg
on tob.tag_id = t.tag_id
and t.tag_group_id = tg.tag_group_id
and tob.object_type_id = 14
and tg.org_id = contactmeta.group_id
and (t.name like '%campaign%')
inner join tagobject tob2, tag t2, taggroup tg2
on tob2.tag_id = t2.tag_id
and t2.tag_group_id = tg2.tag_group_id
and tob2.object_type_id = 14
and tg2.org_id = contactmeta.group_id
and (t2.name like '%bounced%')
РЕДАКТИРОВАТЬ : если это невозможно (из-за ваших комментариев об ограничениях JOIN
), вы можете абстрагировать часть логики в представления, например
create view myView
as
select * from tagobject tob, tag t, taggroup tg
on tob.tag_id = t.tag_id
and t.tag_group_id = tg.tag_group_id
, а затем используйте это представление в исходном sql.