我有一個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