Josh Berkus wrote:

Mark, Tim,



select
pav1.person_id
from
person_attributes_vertical pav1
where
( pav1.attribute_id = 1
and pav1.value_id in (2,3))
or ( pav1.attribute_id = 2
and pav1.value_id in (2,3))



Not the same query, sorry. Daniel's query yields all the person_id's which have criteria A AND criteria B. Yours gives all the person_id's which have criteria A OR criteria B.




Apologies, not thinking clearly enough there...


Maybe try out intersection :


select pav1.person_id from person_attributes_vertical pav1 where ( pav1.attribute_id = 1 and pav1.value_id in (2,3)) intersect select pav1.person_id from person_attributes_vertical pav1 where ( pav1.attribute_id = 2 and pav1.value_id in (2,3))


In the advent that is unhelpful, I wonder about simplifying the situation and investigating how



select pav1.person_id from person_attributes_vertical pav1 where pav1.attribute_id = 1


performs, compared to


select pav1.person_id from person_attributes_vertical pav1 where ( pav1.attribute_id = 1 and pav1.value_id in (2,3))


If the first performs ok and the second does not, It may be possible to get better times by doing some horrible re-writes :e.g:



select pav1.person_id from person_attributes_vertical pav1 where ( pav1.attribute_id = 1 and pav1.value_id||null in (2,3))


etc.


regards

Mark





---------------------------(end of broadcast)---------------------------
TIP 1: subscribe and unsubscribe commands go to [EMAIL PROTECTED]

Reply via email to