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