我有一个SQL查询:这个SQL查询可以被简化吗?
select * from contactmeta
WHERE
contactmeta.contact_id in
(
select tob.object_id from tagobject tob, tag t, taggroup tg
where 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%')
)
AND
contactmeta.contact_id in
(
select tob.object_id from tagobject tob, tag t, taggroup tg
where 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 '%bounced%')
)
我的问题是,我需要简化WHERE子句内的查询的部分(我不能让与contactmeta表等其他连接)。这是因为WHERE子句是在静态SQL上动态创建的。
您可以看到,除了t.name条件,where条件几乎相同。
感谢您的时间
SK
。在你的子查询另一个不同之处。第一个有t.tag_group_id = tg.tag_group_id,第二个没有。 – rayd09 2010-01-23 16:52:03
@ rayd09:我认为这只是复制和粘贴错误,因为第二个子查询有两次'tob.tag_id = t.tag_id'。 @Samuel:这是真的吗?或者你的问题中的查询是否正确? – 2010-01-23 16:58:15
是的,这是一个剪切和粘贴错误...对不起...这个让我看看我是否可以编辑它。 – Samuel 2010-01-23 17:06:55