On 31-01-2014 18:26, Joseph L. Casale wrote:
use a 'inner join', in stead of a 'left join' ?

Hi Luuk,
Sorry for the ambiguity, let me clarify.

Table A yields individual rows that I am interested in. For each of these rows,
a one to many exists with table B and or C.

In this case, an inner join wont work as valid rows from table A don't require
rows from B or C.

However, if an FK ref in B or C exists for a row in A, then *all* of those 
related rows
in B or C must accompany the set.


I need to implement a filter where I may be given one or more column values that
may exist in table B or C. Since the schema requires the ref to A within B or 
C, that
data set (n rows) from B or C might need to exclude the row from A.

For example:

    SELECT
        r.id AS foo
        , r.col_a
        , r.col_b
        , a.name AS a_name
        , a.value AS a_value
        , t.res_id AS t_res_id
        , t.key AS t_key
        , 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 r.guid_id=1
           AND r.status IS NULL
           AND NOT r.id IN (SELECT DISTINCT(req_id) FROM action WHERE 
key='something' AND value='XXXX')
ORDER BY foo

So for every XXXX I need to exclude, I add another AND NOT filter. Is there a 
way to avoid the nested select?

Thanks for the patience guys,
jlc


   SELECT
       r.id AS foo
       , r.col_a
       , r.col_b
       , a.name AS a_name
       , a.value AS a_value
       , t.res_id AS t_res_id
       , t.key AS t_key
       , 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 AND NOT(t.key='something' AND t.value='XXXX')
    WHERE r.guid_id=1
          AND r.status IS NULL
ORDER BY foo


It think you can simply add it to the ON-clause...


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

Reply via email to