Robert,

> delete * from foo where not (foo.a = bar.a and foo.b=bar.b and
> foo.c=bar.c) ;
> 
> so i end up with 
> 
> postgres=# select * from foo; 
>  a | b | c | d 
> ---+---+---+---
>  1 | 2 | 4 | A
>  4 | 5 | 6 | b
> (2 rows)
> 
> but thats not valid sql, is there some way to accomplish this? 

Um, your example result doesn't match your pseudo-query.  Assuming that you 
want to delete everything that DOES match, not everything that DOESN'T, do:

DELETE FROM foo 
WHERE EXISTS ( SELECT bar.a FROM bar
        WHERE bar.a = foo.a AND bar.b = foo.b
                AND bar.c = foo.c );


-- 
-Josh Berkus
 Aglio Database Solutions
 San Francisco


---------------------------(end of broadcast)---------------------------
TIP 9: the planner will ignore your desire to choose an index scan if your
      joining column's datatypes do not match

Reply via email to