Hi Robert, could you try with "exists" ?

SELECT c.*
FROM contacts c
WHERE  exists  ( SELECT  1 FROM phone p WHERE p.addr =? and  p.contact_id=
c.id )
OR exists (SELECT  1 FROM email e WHERE e.addr = ? and  e.contact_id=c.id );





2013/11/21 Robert DiFalco <robert.difa...@gmail.com>

> I have found this:
>
> SELECT c.*
> FROM contacts c
> WHERE c.id IN ( SELECT p.contact_id FROM phone p WHERE p.addr = ? )
> OR c.id IN (SELECT e.contact_id FROM email e WHERE e.addr = ? );
>
> To have a worse plan than:
>
> SELECT * FROM contacts where id IN (
> ( SELECT c.id FROM contacts c
> JOIN phone p ON c.id = p.contact_id AND p.addr = ?
> UNION
> SELECT c.id FROM contacts c
> JOIN email e ON c.id = e.contact_id AND e.addr = ? );
>
> Maybe this is no surprise. But after discovering this my question is this,
> is there another option I dont' know about that is logically the same that
> can perform even better than the UNION?
>

Reply via email to