Joseph L. Casale wrote:
>    SELECT
>        r.id AS foo ...
>        , a.value AS a_value ...
>        , t.value AS t_value
>      FROM request r
> LEFT JOIN attribute a
>           ON a.req_id=r.id
> LEFT JOIN action t
>           ON t.req_id=r.id
>     WHERE ... NOT r.id IN (SELECT DISTINCT(req_id) FROM action WHERE 
> key='something' AND value='XXXX')
>
> Is there a way to avoid the nested select?

The decision whether to return a particular record depends on the values
in some other records.  This is not possible without a subquery.

You could try writing the filter as a correlated subquery, but you have
to measure whether this makes any positive difference:

  WHERE ... NOT EXISTS (SELECT 1 FROM action WHERE req_id = r.id AND 
key='something' AND value='XXXX')

> So for every XXXX I need to exclude, I add another AND NOT filter.

In either form of the subquery, you could write:

  ... AND value IN ('XXXX', 'YYYY', ...)


Regards,
Clemens
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to